【发布时间】:2017-04-23 15:45:49
【问题描述】:
我想在不知道 TypeScript 中的属性名称、值和值类型的情况下将属性分配给类的实例。假设我们有以下example.ts 脚本:
// This could be a server response and could look totally diffent another time...
const someJson:string = '{ "foo": "bar", "bar": "baz" }'
class MyClass {
someProperty:boolean
constructor( json:string ) {
const parsedJson:any = JSON.parse( json )
Object.keys( parsedJson ).forEach(
( key:string ) => {
this[ key ] = parsedJson[ key ]
}
)
this['someProperty'] = true
}
}
const myInstance = new MyClass( someJson )
// Works fine, logs `true`.
console.log( myInstance.someProperty )
// Error: Property 'foo' does not exist on type 'MyClass'.
console.log( myInstance.foo )
// Error: Property 'bar' does not exist on type 'MyClass'.
console.log( myInstance.bar )
如何确保 TypeScript 编译器不会抱怨动态添加的属性,而是将它们作为任何类型的 "key": value 对来处理。我仍然希望tsc 确保myInstance.someProperty 必须是boolean 类型,但我希望能够获得myInstance.whatever,即使它没有被定义而不会遇到编译器错误。
我没有找到任何让我明白这一点的文档。也许是因为我不是以英语为母语的人。所以请保持答案简单。
编辑:
我记得有类似下面的东西,但我从来没有让它工作:
interface IMyClass {
[name:string]: any
}
【问题讨论】:
标签: class typescript properties typescript-typings tsc