在第一个示例中,编译器在创建类Foo
的新对象时不会出现错误.
class Foo<Options extends number[] = (1 | 2 | 3)[] > {
constructor(
public options: Options,
public option: Options[number]
) {}
}
new Foo([4, 5], 1);
如果我现在在Options
之前添加另一个类型参数,然后为前面的类型参数传递一个类型,编译器正确地报告(screenshot of the error).
class Foo<Unused, Options extends number[] = (1 | 2 | 3)[] > {
constructor(
public options: Options,
public option: Options[number]
) {}
}
new Foo<any>([4, 5], 1);
我希望第一个示例与第二个示例的行为相同.在第二个示例中,编译器正确地报告第一个传递的构造函数参数不能赋给默认的Options
类型(1 | 2 | 3)[]
.为什么仅仅将any
作为Unused
类型参数传递就会突然产生所需的行为?为什么它不能像第一个示例中预期的那样工作?