#typescript
#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
аннотацию переменной в класс из интерфейса? Или я неправильно использую аннотацию?
Спасибо!
Ответ №1:
Да, вам нужно снова написать типы в классе. Typescript не будет определять типы свойств на основе implements
предложений. Поэтому, если вы не укажете тип, он будет any
по умолчанию. implements
будет проверяться только то, что свойства класса могут быть реализацией для интерфейса (а свойство с типом any
будет соответствовать любому типу в интерфейсе).
Вы можете поместить сложный тип в специальный интерфейс или использовать запросы типов:
interface PluginManagerInterface {
_plugins: {
[name: string]: {
[status: string]: boolean
}
}
}
class PluginManager implements PluginManagerInterface {
_plugins: PluginManagerInterface['_plugins']
constructor() {
this._plugins = {};
}
// ...code
}
Ответ №2:
Я имею в виду, что вы можете просто создать тип или интерфейс из него:
interface Plugins {
[name: string]: {
[status: string]: boolean;
};
}
interface PluginManagerInterface {
_plugins: Plugins;
}
class PluginManager implements PluginManagerInterface {
_plugins: Plugins;
constructor() {
this._plugins = {};
}
// ...code
}