我有一个类将变量数据绑定到它的实例上。
class RouteData{
constructor(data: Object) {
// binding object attributes to instance
Object.keys(data).forEach((key) => { this[key] = data[key];})
}
}
let route: RouteData = new RouteData({hello: "test"})
console.log(route.hello);
上述结果为test
。
但是,我在编译时遇到错误。
example.ts(9,19): error TS2339: Property 'hello' does not exist on type 'RouteData'.
如何声明此类的类型以允许绑定其类上的任何属性。
答案 0 :(得分:6)
之前添加演员。
console.log((<any>route).hello);
答案 1 :(得分:3)
我建议将接口声明为:
interface IHello {
hello: string;
}
interface IRouteDataHello extends RouteData, IHello { }
let route = <IRouteDataHello>new RouteData(<IHello>{ hello: "test" })
console.log(route.hello);
这使得编译器可以进行静态检查,并允许您轻松地重构代码(这就是TypeScript的用途)。当然,这对一个小项目来说并不重要。
例如,代替IHello
,它可能是更复杂的对象:
interface IRouteData<T> {
path: string;
component: { new () };
as?: string;
data?: T;
}