在此示例中,如何使打字稿编译器推断正确的类型?
interface A<T> {
do(param: T): void
}
class A2 implements A<string>{
do(param){}
}
function createA<T>(constr: new () => A<T>, param: T){}
createA(A2, "")
这里不会编译,并且T被推断为any
答案 0 :(得分:2)
您还需要使类具有通用性,以便可以告诉typescript接口参数和function参数是同一类型,而无需重复自己的操作:
SubSystem Name Entity1 Entity2 Entity3 Entity4 Entity5
SubSys1 ON OFF ON OFF OFF
SubSys2 ON OFF ON ON OFF
SubSys3 OFF ON ON OFF OFF
SubSys4 ON OFF ON OFF OFF
SubSys5 ON OFF ON OFF OFF
答案 1 :(得分:1)
我认为,如果您使用do(param: string)
类实现A<string>
接口,则必须使其A2
。如果尝试为其提供任何其他类型,则应该得到一个错误,因为例如,如果您在do(param: number)
实现中使用A<string>
,则会得到
Property 'do' in type 'A2' is not assignable to the same property in base type 'A<string>'.
Type '(param: number) => void' is not assignable to type '(param: string) => void'.
Types of parameters 'param' and 'param' are incompatible.
Type 'string' is not assignable to type 'number'