Typescript: вывод типа общего класса

Это выглядит довольно просто, но я не уверен, что является причиной ошибки. Я долго искал, но, похоже, не могу найти ответ.

class MyClass<T > {
  property: T = 5 // Error Here: Type '5' is not assignable to type T
}

const tester = new MyClass<number>() // OK

const numberValue: number = tester.property // OK
const stringValue: string = tester.property // Error as expected

Я думал, что T будет выведен как число из "свойства". Я чувствую, что привык работать в прошлом, но я не уверен.

Машинопись детская площадка с примерами


Обновить

Эти определения также имеют те же ошибки.

class MyClass<T extends number> {
  property: T = 5 // Error Here: Type '5' is not assignable to type T
}

class MyClass<T extends object> {
  property: T = {} // Error Here: Type '{}' is not assignable to type T
}

1 ответ

Решение

Это никогда не должно было работать. Все, что вы пишете в определении универсального класса или метода, должно быть действительным для всех возможных значений T для которого класс или метод может быть использован. Назначение property: T = 5 не действует, если кто-то делает new MyClass<string>() чтобы T является string, Вывод происходит только при использовании универсального класса или метода.

Другие вопросы по тегам