我是打字新手,所以我想掌握它的窍门。
网络请求将返回一个JSON对象,其中包含一个ISO日期字符串格式的字段。
data : Data = {when: "2016-07-13T18:46:01.933Z"}
当我为这个接口创建类型签名时,有没有办法指定它实际上是一个ISO时间戳,或者我只需要使用字符串?
interface Data {
when: string
}
我发现我可以使用一个类型别名,这在心理上有所帮助,但并不能真正验证ISO字符串。
type iso = string
interface Data {
when: iso
}
同样,我很好奇是否有任何方法可以从这些typescript注解中生成js验证,这样我就可以验证端点接收到的信息,否则我输入的应用程序的其余部分就毫无价值了。
如果这是可能的,那么如果这个iso字符串可以被强制到一个实际的Date对象中,那就太酷了。
正如我所说的,我是 typescript 的新手,所以我不确定这是否超出了 typescript 应该做的事情的范围。
4条答案
按热度按时间iecba09b1#
您可以使用Type Guard。
然后,您可以使用中的任何自定义逻辑来处理任何错误的日期,例如:
干杯。
ruyhziif2#
如果可以将此iso字符串强制转换为实际的Date对象,那就太酷了
不,这是不可能的。对于javascript来说,typescript的接口没有任何关系。(JS根本不为接口生成)。而且所有的类型检查都是在“编译”或“传输”时完成的,而不是在运行时。
您可以做的是,在解析json时使用
reviver
函数。例如:您还可以通过键来标识
Date
属性,如果它与日期模式不匹配,您可以抛出错误或执行任何您想要的操作。1u4esq0p3#
试试这个:
source
66bbxpm54#
您可以使用io-ts-types中的
DateFromISOString
,请参阅其documentation。