此问题在此处已有答案:
Why duck typing is allowed for classes in TypeScript(2个答案)
3天前关闭.
class C {
p:number = 3;
}
class D {
p:number = 21321;
}
function createLabel(nameOrId: number): C {
let a = new D();
return a;
}
console.log(createLabel(3).p);
那么,为什么函数返回D
类型的结果而不是C
类型的结果而没有类型错误呢?
2条答案
按热度按时间hc8w905p1#
不会出现错误,因为typescript假设这些值是“任意数字”,因为您严格地将它们键入
number
。从那些
p
字段中删除严格的类型并添加readonly
修饰符。对于readonly
,那些属性的类型与其值相同,因此C.p
现在具有3
类型,而不仅仅是number
。3pvhb19x2#
您必须定义C类型,并且将根据D定义检查该对象的定义,如果它们相同,则在添加类时不会出现错误
这将返回不兼容问题。