当你要遍历一个对象或者数组时,有时你并不提前知道类型属性的所有名称,但你确实知道值的形状。在这些情况下,你可以使用索引签名来描述可能值的类型,例如(格式化时间):
interface OptIndexSignature{ // 索引签名
[propName:string]:string
}
const opt:OptIndexSignature = {
'y+': date.getFullYear().toString(), // 年
'm+': (date.getMonth() + 1).toString(), // 月
'd+': date.getDate().toString(), // 日
'H+': date.getHours().toString(), // 时
'M+': date.getMinutes().toString(), // 分
'S+': date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
}
for (const k in opt) {
ret = new RegExp('(' + k + ')').exec(fmt)
if (ret) {
fmt = fmt.replace(
ret[1],
ret[1].length === 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')
)
}
}
上面,我们有一个 OptIndexSignature
接口,它有一个索引签名。这个索引签名表明当一个 OptIndexSignature
被一个 string
索引时,它将返回一个 string
。
索引签名属性只允许使用某些类型:string、number、symbol、模板字符串模式以及仅由这些组成的联合类型
最后,你可以使索引签名 readonly
以防止分配给它们的索引:
interface OptIndexSignature{ // 索引签名
readonly [propName:string]:string
}
网友评论