Class 键入的 Rest 参数被视为来自 typescript 的任何参数
Class typed Rest Parameters is treated like any from typescript
我正在尝试将我的正式 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);
这是我的代码部分的简化,有 class 命名为 'A' 和函数 'a' 需要数字类型索引和 [=31= 的实例数量] 'A'.
按我的预期,这段代码应该会出错。因为45是数字,c是数组。
但它有效。
它将此打印到控制台
0 [ 45 ]
1 [ [ A {}, A {}, A {} ] ]
2 [ A {}, A {}, A {} ]
我错过了什么?是运行时错误吗? (我使用 deno 作为 javascript/typescript 运行时)
或者,Typescript 是否允许这样做?
我是 Typescript 的新手,所以我需要一些建议。
因为 A 是一个空的 class,它所拥有的唯一属性就是所有对象所拥有的属性; .toString
或 .valueOf
之类的东西。 number
也具有所有这些相同的属性,数组也是如此,所以您传入的 确实 与您要求的相匹配。
只要给 A 添加属性,这个问题就会消失。例如,如果您添加 id: string
属性,那么现在数字和数组都不会匹配,因为它们没有这样的 属性.
我正在尝试将我的正式 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);
这是我的代码部分的简化,有 class 命名为 'A' 和函数 'a' 需要数字类型索引和 [=31= 的实例数量] 'A'.
按我的预期,这段代码应该会出错。因为45是数字,c是数组。
但它有效。
它将此打印到控制台
0 [ 45 ]
1 [ [ A {}, A {}, A {} ] ]
2 [ A {}, A {}, A {} ]
我错过了什么?是运行时错误吗? (我使用 deno 作为 javascript/typescript 运行时) 或者,Typescript 是否允许这样做?
我是 Typescript 的新手,所以我需要一些建议。
因为 A 是一个空的 class,它所拥有的唯一属性就是所有对象所拥有的属性; .toString
或 .valueOf
之类的东西。 number
也具有所有这些相同的属性,数组也是如此,所以您传入的 确实 与您要求的相匹配。
只要给 A 添加属性,这个问题就会消失。例如,如果您添加 id: string
属性,那么现在数字和数组都不会匹配,因为它们没有这样的 属性.