下面的内容看起来很简单,但我不确定是什么导致了错误。我四处寻找了很长一段时间,但似乎找不到答案。
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可以从"property"中推断为数字。我觉得过去工作过,但我不确定。
打字游戏场示例
更新
这些定义也有相同的错误。
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
}
这本不应该奏效。无论您在泛型类或方法的定义中写什么,都必须对该类或方法可能使用的T
的所有可能值有效。如果有人执行new MyClass<string>()
使得T
是string
,则分配property: T = 5
无效。只有当使用泛型类或方法时,才会发生推理。