如何在 TypeScript 中将数组类型隐式转换为元组类型?

穆罗莱姆

现在,args是元组类型的其余参数。如何使这个构造函数也接受数组,当转换为元组类型时,将导致在所述构造函数中指定的类型?

是否可以在没有对构造进行手动断言的情况下完成,例如:

const args = [3, 5];

let vector = new Vector(...args as [number, number]);

const args: [number, number] = [3, 5];

let vector = new Vector(...args);

class Vector {
    x: number;
    y: number;

    constructor(...args: [] | [number] | [number, number]) {
        switch(args.length) {
            case 0:
                this.x = 0;
                this.y = 0;
                break;
            case 1:
                this.x = this.y = args[0];
                break;
            case 2:
                this.x = args[0];
                this.y = args[1];
                break;
        }
    }
}

const args = [3, 5];

let vector = new Vector(...args);

游乐场

编辑:考虑到@philipp-fritsche 的回答,如果我要添加这些重载怎么办?

class Vector {
    x: number;
    y: number;

    constructor();
    constructor(xy: number);
    constructor(x: number, y: number);
    constructor(arg1?: number, arg2?: number) {
        if(arg1 === undefined) {
            this.x = this.y = 0;
        } else if (arg2 == undefined) {
            this.x = this.y = arg1;
        } else {
            this.x = arg1;
            this.y = arg2;
        }
    }
}

const args = [1, 2];

let vector = new Vector(...args);
菲利普·弗里切

在这里定义每个休息的参数没有任何好处。

class Vector {
    x: number;
    y: number;

    constructor(x?: number, y?: number) {
        this.x = x ?? 0
        this.y = y ?? x ?? 0
    }
}

const args = [3, 5];

let vector = new Vector(...args);

这是有效的,因为为 args 推断的类型是number[]. 元素01of number[]arenumber | undefined与 的参数匹配Vector

如果您指定...args: [] | [number] | [number, number], 0,12参数是允许的。但是number[]可以有>=0元素。所以这违反了你的显式类型。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在TypeScript中将数组初始化为元组类型?

如何在Typescript中将接口转换为映射类型

如何在Typescript中将类型转换为接口

如何在 Typescript 中将 tf.Tensor 类型转换为数字类型

如何在 TypeScript 中将未知类型转换为字符串?

如何在Typescript中将字符串转换为字符串文字类型?

如何在 api 中将 JSON 对象转换为 Typescript 数组

如何在TypeScript中将Set转换为数组

如何在 Typescript 中将给定类型的所有属性转换为另一个类型?

如何在Typescript中将类型注入函数?

如何在TypeScript 4.0中将已命名的元组转换为未命名的元组?

隐式类型转换中的TypeScript错误

如何在Typescript中将缺少字段的对象转换为Typescript?

如何编写将元组数组转换为元组联合的类型

如何在Kotlin中将类型擦除列表转换为数组?

如何使用TypeScript将对象类型数组转换为平面对象类型?

如何将类型投影转换为隐式的PDT?

如何隐式地从`any`转换为更强的类型

如何在 Typescript 中使用可变参数元组类型?

Typescript对象类型转换为数组类型

如何在Typescript 3.0中将元组“映射”到另一个元组类型

如何在TypeScript中将数组的每个字符串转换为数组中的Object?

如何在 React JS 中将 TypeScript 转换为 JavaScript

如何在TypeScript中将字符串转换为数字?

如何在TypeScript中将字符串转换为枚举?

如何在Typescript中将字符串转换为枚举

如何在Typescript中将类定义指定为参数类型

如何在Typescript中将通用类型键入为接口的子集?

如何在TypeScript中将类型声明为可为空?