Почему TypeScript не допускает универсального значения перечисления в качестве значения параметра по умолчанию - PullRequest
0 голосов
/ 08 октября 2018

Я не могу понять, почему следующий код смущает компилятор.

enum Enum {
    a,
    b,
    c
}

const func = <T extends Enum>(param: T = Enum.a) => param;

Здесь я ограничиваю T типом Enum и устанавливаю параметр по умолчанию равным перечислителю Enum.a.Но TypeScript терпит неудачу в части (param: T = Enum.a) с сообщением Type 'Enum.a' is not assignable to type 'T'.

Чего мне здесь не хватает, так как я не могу понять это самостоятельно, а онлайн-ресурсы, которые я могу найти, охватывают только основы?

Вот URL игровой площадки

1 Ответ

0 голосов
/ 09 октября 2018

Это ошибка по той же причине, что и следующая ошибка:

class Bar {
    bar = 123
}
const a = new Bar();
// Error `Bar` is not assignable to `T`
const bar = <T extends Bar>(param: T = a) => param;

Причина

Поскольку T может быть чем-то, что расширяет Bar и, следовательно, Bar не будет совместимым значением.

class Baz extends Bar {
    baz = 456;
}
const example:Baz = bar<Baz>(); // will blow up
...