typescript 为什么这个例子没有类型返回错误[duplicate]

sigwle7e  于 2023-03-13  发布在  TypeScript
关注(0)|答案(2)|浏览(130)

此问题在此处已有答案

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类型的结果而没有类型错误呢?

hc8w905p

hc8w905p1#

不会出现错误,因为typescript假设这些值是“任意数字”,因为您严格地将它们键入number
从那些p字段中删除严格的类型并添加readonly修饰符。对于readonly,那些属性的类型与其值相同,因此C.p现在具有3类型,而不仅仅是number

class C {
    readonly p = 3;
}
class D {
   readonly p = 21321
}

const createLabel = (nameOrId: number): C => {
    let a = new D();
    return a; // Err
}

console.log(createLabel(3).p);
3pvhb19x

3pvhb19x2#

您必须定义C类型,并且将根据D定义检查该对象的定义,如果它们相同,则在添加类时不会出现错误

Class C{p:string} // different type

这将返回不兼容问题。

相关问题