我是否需要在TypeScript的类和接口中都注释对象属性?

时间:2019-04-23 13:18:29

标签: typescript

我开始使用TypeScript,并在注释类中遇到有关BP的问题。

因此,例如:

interface PluginManagerInterface {
    _plugins: {
        [name: string]: {
            [status: string]: boolean
        }
    }
}

class PluginManager implements PluginManagerInterface {

    _plugins: {
        [key: string]: {
            [status: string]: boolean
        }
    }

    constructor() {
        this._plugins = {};
    }

    // ...code
}

我是否需要在此处将_plugins变量注释从接口复制粘贴到类?还是我使用注释错误?

谢谢!

2 个答案:

答案 0 :(得分:2)

我的意思是,您可以使用它来创建类型或接口:

interface Plugins {
  [name: string]: {
    [status: string]: boolean;
  };
}

interface PluginManagerInterface {
  _plugins: Plugins;
}

class PluginManager implements PluginManagerInterface {
  _plugins: Plugins;

  constructor() {
    this._plugins = {};
  }

  // ...code
}

答案 1 :(得分:2)

是的,您需要再次在类中编写类型。 Typescript不会根据implements子句推断属性类型。因此,如果您不指定类型,则默认为anyimplements仅检查类属性是否可以作为接口的实现(类型为any的属性将匹配接口中的任何类型)。

您可以将复杂类型放在专用界面中,也可以使用类型查询:

interface PluginManagerInterface {
    _plugins: {
        [name: string]: {
            [status: string]: boolean
        }
    }
}

class PluginManager implements PluginManagerInterface {

    _plugins: PluginManagerInterface['_plugins']

    constructor() {
        this._plugins = {};
    }

    // ...code
}