3

如果动态类属性由运算符访问,则有一种方法可以声明其类型,[]如下例所示:

class Foo {
  [key: string]: number;
}

let a = new Foo();
let b = a['bar']; //Here, the compiler knows that b is a number

但是有没有办法在没有[]运算符的情况下声明相同的东西?一种写法:

let a = new Foo();
let b = a.someProperty;

并让 TypeScript 知道它someProperty的类型number,因为我们对它说:所有未知属性Foo都是类型 number

4

1 回答 1

2

我不认为这是可能的。当你定义类时,你定义了关于它的属性和方法的“静态”信息。如果您指定索引器 - 这意味着 - 类的对象将具有索引器,而不是任何属性。毕竟,这就是类的用途——定义业务实体的结构。

我知道做类似于您想要的事情的唯一方法是使用对象文字。例如,这将起作用:

let x: { PropA: number, [x: string]: number };
x = { PropA: 1, PropX: 2, PropY: 3, PropZ: 4 };

希望这可以帮助。

于 2016-03-03T10:57:47.997 回答