rest参数的类型检验
来源:2-12 泛型(Generics) 第三部分 - 类和接口

慕粉1845456658
2020-05-02
老师,您好,有一个问题想请教您一下。
代码如下:
class Person {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
}
function createInstance<T>(ctor: new (...params) => T, ...args): T {
return new ctor(...args)
}
const person = createInstance<Person>(Person, 123, 20) // should be error: 类型“123”的参数不能赋给类型“string”的参数
console.log(person.name) // 123
console.log(person.name.length) // undefined
我的问题是:
1、Person的constructor方法中,name参数应该是字符型;但在createInstance<Person>(Person, 123, 20) 中传入的123是number类型,但是typescript没有提示类型错误,导致person.name.length为undefined。
2、如何给rest参数...params进行类型校验?
1回答
-
同学你好,ts 没办法,进入函数体内,进行参数校验,你可以在 createInstance 的 ...args 进行校验,语法和其他一样 ...args: string[]
虽然 person.name 其实是个数字,但是 Person类上 的name 属性定义是个string 类型,所以ts 没有办法校验出来这个错误。你返回的是 Person 的实例,它自然以为 name 是字符串
042020-05-12
相似问题