有没有可能定义一个包含字符串格式信息的接口?举个例子:
interface timeMarkers{
markerTime: string[]
};
例如:
{
markerTime: ["0:00","1:30", "1:48"]
}
我的问题是:有没有一种方法可以定义markerTime
的类型,使得字符串值必须始终匹配这个正则表达式,而不是简单地将其声明为string[]
并从那里开始?var reg = /[0-9]?[0-9]:[0-9][0-9]/;
9条答案
按热度按时间fcwjkofz1#
没有办法定义这样的类型。GitHub上有一个proposal来支持这一点,但它目前似乎不是优先级。对它进行投票,也许团队可能会在未来的版本中包含它。
编辑
从Python 4.1开始,你可以定义一个类型来验证字符串,而不需要定义所有的选项:
Playground链接
esbemjvw2#
在正则表达式类型可用于该语言之前,您现在可以在TS 4.1中使用template literal types。
让我参考问题示例并说明如何建模称为
Time
的时间限制string
类型。Time
需要hh:mm
的字符串(例如"23:59"
),此处为简化。第一步:定义
HH
和MM
类型将以下代码粘贴到浏览器Web控制台:
生成的结果,我们可以在TS中使用:
第二步:声明
Time
就这么简单
第三步:测试
下面是一个使用
Time
的实时代码示例。vwhgwdsa3#
紧凑的解决方案,汇集了来自@bela53和@yoel halb的想法。
此解决方案有2039个Time类型的枚举成员。
TSPlayground
xkrw2x1b4#
基于@bela53的答案,但更简单,我们可以做一个非常简单的解决方案,类似于@Titian,但没有缺点:
rggaifut5#
警告:TypeScript可以用@bela53方法处理的内容有限制...
基于@bela53的回答,我尝试了以下类型定义的IPv4地址导致
"TS2590: Expression produces a union type that is too complex to represent."
这个定义导致IntelliJ消耗了大量的CPU时间,当我忽略TypeScript错误并试图构建它仍然有效的前提下(我最终需要杀死并重新启动IntelliJ)。我不确定是否有任何解决方法。
dy2hfwbg6#
MySQL日期时间字符串
我试图创建一个类型,以反映MySQL日期时间字符串值,即“2022-07-31 23:11:54”。
有趣的是,您目前几乎可以做到这一点,但如果您添加任何更多的特异性,它将最终要么是任何或抱怨它不能添加更多的输入。我认为它可以创建的打字数量是有限的?
2nc8po8w7#
我现在也在找类似的功能!
最后我想到了这个:难道不可能通过设置一个更复杂的开发环境来运行它吗?也许您可以使用文件监视器来触发tsc并查找TypeError事件来更新 *d.ts文件。
我的意思是:
作为一个钩子(基本的建议):
也许这种解决方案可以让您在编译时根据RegEx动态添加类型。
你觉得呢?
zfycwa2u8#
为了补充@bela53的答案,const assertions可以用于类型构造。
nvbavucw9#
我的两分钱