ES6和类型定义:动态地将类型分配给超类的属性并用于智能感知

时间:2020-03-17 08:15:16

标签: javascript typescript ecmascript-6 types type-definition

使用es6,说我有一个基类:

export class BaseClass {
  constructor(meta) {
    this.meta = Object.assign({}, { alwaysPresent: 'some value' }, meta);
  }
}

和一个子类类:

import { BaseClass } from './base-class';
import childMeta from './child-meta';

export class ChildClass extends BaseClass {
  constructor() {
    super(childMeta);
  }

  fn() {
    this.meta.property1;
  }
}

其中childMeta为:

export default {
  property1: 'property1Value',
  property2: 'property2Value'
};

如何创建base-class.d.ts,以便在执行this.meta时可以查看childMeta中的属性?

类似这样的东西:

enter image description here
当前base-class.d.ts

export class BaseClass {
  protected meta: { property1: string; property2: string }; // for illustration purposes
}

注释:

  • childMeta实际上可以是具有任何属性的任何js对象
  • 多个类将扩展基类
  • 真的,我主要是在理解之后。我为此使用vscode。

到目前为止,我尝试阅读一些动态类型教程,但我似乎无法使其正常工作。

我什至需要吗?

1 个答案:

答案 0 :(得分:0)

您可以使用创建基于childMeta的类型

type ChildMeta = typeof childMeta;

鉴于此,这取决于您要对该类型执行的操作。

  • 如果要在meta中定义BaseClass的类型,请添加具有以下类型的字段:

    meta: ChildeMeta;
    
  • 如果仅子类应该获得类型注释,则可以使用类型断言:

    super(childMeta as ChildMeta);