TypeScript构造函数类型安全

bdavies6086

当将变量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);

}

谢谢!

芬顿

简短答案...因为未分配字符串,因此正在分配type变量any

this.id = idArg;

any类型的装置,该值“可以被视为任何类型”。因此,当编译器询问“我可以分配any一个number”时,答案是“是”。

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

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

这样做的另一个好处是,告诉您分配是一个可能的错误,这将迫使您更新签名(解析字符串中的数字,或在提供字符串时执行您想做的任何事情)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TypeScript中的抽象构造函数类型

来自分类Dev

TypeScript 构造函数重载返回不同的类型

来自分类Dev

TypeScript:如何创建类型安全的mapObject函数?

来自分类Dev

继承和TypeScript错误:X不是构造函数类型

来自分类Dev

从TypeScript中的泛型类型获取构造函数/实例

来自分类Dev

使用自己的Typescript类型时,默认不是构造函数

来自分类Dev

使用泛型和构造函数的 TypeScript 类型转换?

来自分类Dev

TypeScript 中泛型类型的返回构造函数

来自分类Dev

TypeScript 为大量构造函数属性定义类型

来自分类Dev

子类型的构造函数

来自分类Dev

TypeScript构造函数

来自分类Dev

C ++构造函数线程安全

来自分类Dev

是否可以将构造函数用作TypeScript中另一个函数的参数类型?

来自分类Dev

找不到类型的构造函数

来自分类Dev

构造函数中的类型约束

来自分类Dev

类型构造函数参数推断

来自分类Dev

移动指针类型的构造函数?

来自分类Dev

类中构造函数的类型

来自分类Dev

构造函数是什么类型?

来自分类Dev

类型构造函数的Scala继承

来自分类Dev

Ninject多类型构造函数

来自分类Dev

TypeScript构造函数语法

来自分类Dev

我可以告诉TypeScript泛型类型具有构造函数吗?

来自分类Dev

TypeScript Map类构造函数,其初始值不接受2种不同类型

来自分类Dev

TypeScript-如何从构造函数输入参数中推断类型信息?

来自分类Dev

是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

来自分类Dev

类型构造函数作为返回类型

来自分类Dev

类型类中的类型与值构造函数

来自分类Dev

用于减去HList类型的类型构造函数?

Related 相关文章

热门标签

归档