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
, Вывод происходит только при использовании универсального класса или метода.