索引签名标识符有什么作用?
interface IIndex {
[something: string]: any;
}
谁会再次使用“某物”?
或者换句话说,为什么不是语法:
interface IIndex {
[string]: any;
}
答案 0 :(得分:8)
我的猜测是,这是出于一致性和接近JavaScript的原因。
就像命名方法参数(甚至在接口中)一样,TS中方法,构造函数,函数和索引器的所有参数都必须是name: type
或name
的格式(意为{{ 1}})。 (故事的简化版,但我相信你能得到我)
由于名称和类型在TypeScript中存在于不同的名称空间中,因此name: any
形式的参数将不明确。请记住,TypeScript的使命是保持与JavaScript的接近,因此将上述解释为string
类型的参数是不可接受的,事实证明它确实等同于string
。
此外,虽然索引器可能是一个例外,因为它们只能是string: any
或string
类型,但情况并非总是如此(TS 0.8允许number
),所以另一个原因可能是促进迁移到0.9。