【发布时间】:2021-08-23 18:20:50
【问题描述】:
我想创建一个只允许以给定前缀开头的属性的类型:
const example = {
'#prop1': () => {},
'#prop2': () => {}
}
因此,在这种情况下,每个属性都必须以 # 为前缀。我在»Mapped Types« 中玩过»Template Literal Types«,就像这样:
interface WithD {
[s: `#${string}`]: () => void
}
但这会产生这个错误:
索引签名参数类型必须是“字符串”或“数字”。
有什么办法可以做到吗?
【问题讨论】:
-
映射类型假定您有一个类型并将其属性映射到其他东西。
Record将与工会合作。但是在这两种情况下,您都需要有限数量的选项,我怀疑 TS 会在随机属性上做正则表达式。
标签: typescript template-literals conditional-types mapped-types