有人能解释一下为什么我会出现以下错误吗?
类型“A”上不存在属性“prop1”。ts(2339)
代码
interface A {
prop1:string;
};
class myClass<A> {
ptop1: string;
constructor(input: A) {
this.ptop1 = input.prop1; //error happens in this line (Property 'prop1' does not exist on type 'A'.ts(2339))
}
}
之间存在冲突
class myClass{
ptop1:string;
constructor(input:A){
this.ptop1=input.prop1;
}
}
在你的课堂上,
泛型类型表示任何类型,因此您只能使用泛型参数,就好像它可以是任何和所有类型一样,因此您不能访问任何特定的属性。
也就是说,在您的情况下,您应该使用更具体的< code>T类型,使用< code>implements关键字来告诉编译器泛型类型T是实现< code>A接口的东西。
interface A {
p1: string
}
/* THIS DOES NOT WORK */
class c <T implements A> {
t1: string;
constructor(t: T){
this.t1 = t.p1
}
}
不幸的是,typescript不允许<code>T在泛型声明中实现</code>表达式;然而,通过滥用extends
关键字,有一种变通方法,表达能力较差
interface A {
p1: string
}
class c <T extends A> {
t1: string;
constructor(t: T){
this.t1 = t.p1
}
}
你可以这样做
interface A {
prop1: string
}
// constraint A1 with A
class myClass <A1 extends A> {
ptop1: string
constructor(input: A1){
this.ptop1 = input.prop1
}
}
游戏场