如果动态类属性由[]
运算符访问,则可以声明动态类属性的类型,如下例所示:
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
上的所有未知属性的类型为。< / p>
答案 0 :(得分:2)
我不认为这是可能的。定义类时,您可以定义有关其属性和方法的“静态”信息。如果你指定索引器 - 它就意味着 - 类的对象将具有索引器,而不是任何属性。毕竟那些类是什么 - 定义业务实体的结构。
我知道做类似于你想要的事情的唯一方法是使用对象文字。例如,这将起作用:
let x: { PropA: number, [x: string]: number };
x = { PropA: 1, PropX: 2, PropY: 3, PropZ: 4 };
希望这有帮助。