在typescript中,索引签名标识符是什么?

noo*_*oop 11 typescript

索引签名标识符有什么作用?

interface IIndex {
  [something: string]: any;
}
Run Code Online (Sandbox Code Playgroud)

谁会再次使用"东西"?

或者换句话说,为什么语法不是:

interface IIndex {
  [string]: any;
}
Run Code Online (Sandbox Code Playgroud)

cou*_*udy 8

我的猜测是,这是出于一致性和接近JavaScript的原因.

就像命名方法参数(甚至在接口中)一样,TS中方法,构造函数,函数和索引器的所有参数都必须是格式name: typename(含义name: any).(故事的简化版,但我相信你能得到我)

由于名称和类型在TypeScript中存在于不同的名称空间中,因此表单的参数string将不明确.请记住,TypeScript的使命是保持与JavaScript的接近,因此将上述解释为类型的参数string将是不可接受的,并且事实证明它确实等同于string: any.

此外,虽然索引器可能是一个例外,因为它们只能是类型string或者number,但情况并非总是如此(允许TS 0.8 any),因此另一个原因可能是促进迁移到0.9.