javascript - TypeScript 无法在扩展语法函数调用中推断数组类型

标签 javascript arrays typescript spread-syntax

我可以将数组作为函数/构造函数参数传播,没有任何问题:(test.js)

class Person {
    name; 
    age;

    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
}

let a = ['Claire', 8];
let p = new Person(...a);

console.log(p);

但是,同样的事情在 TypeScript 中不起作用:(test.ts)

class Person {
    constructor(
        public name: string,
        public age: number
    ) {}
}

let a = ['Claire', 8];
let p = new Person(...a);  // Error: An argument for 'name' was not provided.

console.log(p);

这是 TypeScript 中的错误吗?它无法弄清楚如何在这里使用扩展语法。是否有解决方法,或者我必须手动分配每个单独的参数?

最佳答案

选项 1:

let a: [string, number] = ['Claire', 8];

选项 2:

let a = ['Claire', 8] as const;

这将告诉 TypeScript 将 a 视为一个元组,其中包含 'Claire' 作为其第一项,8 作为其第二项,符合以下条件[字符串,数字]。如果没有 as consta 会被视为 (string | number)[]

关于javascript - TypeScript 无法在扩展语法函数调用中推断数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61235755/

相关文章:

arrays - 在 3d 矩阵的第二维中排序

javascript - 在流程图中传递ajax参数

javascript - 如何使用 jQuery 的 Javascript 交换 div 中文本的链接?

javascript - 在不更新/修改该对象的情况下如何更新对象值?

arrays - 如何在 Powershell 中使用数组调用带有参数的函数?

javascript - 我得到 [1,15],而不是 [1,0,15]。 JavaScript 过滤器

typescript - 如何制作依赖于先前值的 typescript 定义?

typescript - 用于 Sequelize v5 和 Typescript 的模型加载器

gruntjs - TypeScript 编译器在 Mac 上失败

javascript - Angular 加载本地文件,然后进行 http 调用以返回可观察对象