как правильно использовать includes с enum в TS

есть такой код:

enum EEnum {
    A = 'A'
}

type EType = keyof typeof EEnum

let value: EType = EEnum.A

if (value === EEnum.A) {
    // norm
}

if ([EEnum.A].includes(value)) {
    // Argument of type '"A"' is not assignable to parameter of type 'EEnum'.(2345)
}

playground

Сравнение через '===' TS пропускает, но через includes - нет

Подскажите, как правильно использовать includes с enum`ами


Ответы (1 шт):

Автор решения: Pavel Grishaev

Можно либо указать тип EEnum для value (а не тип ключей string):

enum EEnum {
    A = 'A'
}

let value: EEnum = EEnum.A

if (value === EEnum.A) {
    // norm
}

if ( [EEnum.A].includes(value)) {
    // Argument of type '"A"' is not assignable to parameter of type 'EEnum'.(2345)
}

playground

, либо указать, что у вас массив строк:

enum EEnum {
    A = 'A'
}

type EType = keyof typeof EEnum

let value: EType = EEnum.A

if (value === EEnum.A) {
    // norm
}

let arr: string[] = [EEnum.A]

if ( arr.includes(value)) {
    // Argument of type '"A"' is not assignable to parameter of type 'EEnum'.(2345)
}

playground

→ Ссылка