类类型的Rest参数被视为与打字稿中的任何参数一样

问题描述 投票:0回答:1

我正在尝试将我的正式Javascript项目迁移到Typescript,并且遇到了很奇怪的事情。

class A { }

function a(i: number, ...args: A[]): void {
    console.log(i, args);
}

const b = new A();
const c = [new A(), new A(), new A()];

a(0, 45);
a(1, c);
a(2, b, b, b);

这是我的代码部分的简化,有一个名为“ A”的类,而函数“ a”需要一个数字类型索引和类“ A”的实例数量。

我期望,此代码应该出错。因为45是数字,c是一个数组。

但有效。

将其打印到控制台

0 [ 45 ]
1 [ [ A {}, A {}, A {} ] ]
2 [ A {}, A {}, A {} ]

我想念什么?它是运行时错误吗? (我使用deno作为javascript / typescript运行时)还是有某种原因使Typescript允许这样做?

我是Typescript的新手,所以我需要一些建议。

javascript typescript args
1个回答
0
投票

由于A是一个空类,所以它将具有的唯一属性是所有对象都具有的属性; .toString.valueOf之类的东西。 number也具有所有这些相同的属性,数组也是如此,因此您要传递的[匹配您的要求。

将属性添加到A后,此问题就会消失。例如,如果添加id: string属性,那么数字和数组都不匹配,因为它们没有这样的属性。

Playground link

© www.soinside.com 2019 - 2024. All rights reserved.