打字稿:在类

时间:2015-08-07 22:20:59

标签: typescript

我有一个类将变量数据绑定到它的实例上。

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'.

如何声明此类的类型以允许绑定其类上的任何属性。

2 个答案:

答案 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;
}