如何从泛型类访问静态变量?

时间:2017-07-23 23:54:47

标签: typescript generics typescript-generics

我有许多带有静态变量的类,如下所示:

user.ts:

export class User {
  static modelKey = 'user';

  // other variables
}

car.ts:

export class Car {
  static modelKey = 'car';

  // other variables
}

我希望在某个地方拨打DataSource(见下文),如下所示:

const dataSource = new DataSource<Car>();

数据-source.ts:

export class DataSource<T> {

  constructor() {
    console.log(T.modelKey); // won't compile
  }  
}

当然,它不会编译,因为我不能简单地使用T.<variable>。所以,我的问题是:我怎样才能做到这一点?

Playground

1 个答案:

答案 0 :(得分:2)

您不能仅在传入的参数上访问类型的属性,因为在运行时不存在类型。

但是你可以将你的类传递给你的构造函数,然后访问它的属性。

e.g。

export class User {
  static modelKey = 'user';

  // other variables
}
export class Car {
  static modelKey = 'car';

  // other variables
}

interface ModelClass<T> {
  new (): T;
  modelKey: string;
}

export class DataSource<T> {

  constructor(clazz: ModelClass<T>) {
    console.log('Model key: ', clazz.modelKey); // will compile
  }  
}

new DataSource(Car);

Playground link