gpt4 book ai didi

javascript - TypeScript 构造函数类型安全

转载 作者:行者123 更新时间:2023-11-28 15:12:05 28 4
gpt4 key购买 nike

为什么当变量 id 被声明为数字时,在构造函数中为它分配一个字符串时,下面的代码可以正常编译?

interface IComplexType{
id: number;
name: string;
}

class ComplexType implements IComplexType{
id: number;
name: string;
constructor(idArg: number, nameArg: string);
constructor(idArg: string, nameArg: string);
constructor(idArg: any, nameArg: any){
this.id = idArg;
this.name = nameArg;
}

}

window.onload = () =>{
var complexType: ComplexType = new ComplexType("hi","hi");
console.log(complexType.id);

}

谢谢!

最佳答案

简答...因为它没有被分配一个字符串,它被分配一个 any 类型的变量。

this.id = idArg;

any 类型意味着该值“可以被视为任何类型”。因此,当编译器询问“我可以将 any 分配给 number”时,答案是"is"。

您可以使用联合类型缩小构造函数中的类型(并消除重载,这始终是一件积极的事情):

class ComplexType implements IComplexType{
id: number;
name: string;
constructor(idArg: string | number, nameArg: string){
this.id = idArg;
this.name = nameArg;
}
}

这还有一个额外的好处,就是告诉您该赋值可能是错误,这将迫使您更新签名(从字符串中解析数字,或者在提供字符串时执行您想要的任何操作)。

示例的关键部分是string | number,表示类型是字符串或数字,比 any 限制更严格。

关于javascript - TypeScript 构造函数类型安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com