Правильное определение типа для переменной, присвоенной перечислением - PullRequest
1 голос
/ 02 октября 2019

Мне интересно, каково правильное определение типа для переменной, назначенной с перечислением внутри компонента Angular.

Рассмотрим следующую ситуацию:

@Component({
    selector: 'dashboard-component',
    templateUrl: './dashboard.component.html',
    styleUrls: ['./dashboard.component.scss']
})
export class DashboardComponent {
    componentActions = ComponentActions;

    ...
}

export enum ComponentActions {
    ACTION_OK,
    ACTION_CANCEL,
}

В основном мне нужно использоватьComponentActions перечисление внутри шаблона моего компонента, поэтому я назначил общедоступную переменную componentActions с помощью перечисления ComponentActions, и я хочу указать тип этой общедоступной переменной .

. следующий код:

componentActions: ComponentActions = ComponentActions;

выдаст ошибку в tslint:

Type 'typeof ComponentActions' is not assignable to type 'ComponentActions'

В противном случае, используя следующий код:

componentActions: typeof ComponentActions = ComponentActions;

нет ошибки от tslint.

Мой вопрос: какой тип переменной является публичной? Достаточно использовать ключевое слово typeof или есть определенный способ?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Итак, я собираюсь ответить на свой вопрос.

В соответствии с определением машинописи, в приведенном ниже коде:

componentActions: typeof ComponentActions = ComponentActions;

typeof называется запросом типа .

Запрос типа получает тип идентификатора или выражения доступа к свойству, и он наиболее близок к достижению моей цели.

1 голос
/ 02 октября 2019

Вы не должны присваивать enum переменной. Enum - это просто объект. Вам нужно передать тип и назначить одно из значений перечислений.

componentActions: ComponentActions = ComponentActions.ACTION_OK;
0 голосов
/ 02 октября 2019

Тип 'typeof ComponentActions' нельзя назначить типу 'ComponentActions'

В сообщении об ошибке указывается, что вы пытались назначить тип переменной типа - конечно, это не таквозможно. Чтобы присвоить значение переменной enum:

componentActiosn: ComponentActions = ComponantActions.ONE_OF_YOUR_DEFINED_ENUM VALUES; (ACTION_OK, ACTION_CANCEL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...