我正在尝试将我的正式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的新手,所以我需要一些建议。
由于A是一个空类,所以它将具有的唯一属性是所有对象都具有的属性; .toString
或.valueOf
之类的东西。 number
也具有所有这些相同的属性,数组也是如此,因此您要传递的[
id: string
属性,那么数字和数组都不匹配,因为它们没有这样的属性。