要使TypeScript泛型类仅限于对象数组的类型,可以使用类型约束和条件类型来实现。
首先,定义一个泛型类,并使用类型约束来限制泛型参数必须为对象类型:
class ObjectArray<T extends object> {
private array: T[];
constructor(array: T[]) {
this.array = array;
}
// 其他方法和属性
}
在上述代码中,T extends object
表示泛型参数T
必须为对象类型。
接下来,使用条件类型来进一步限制泛型类仅接受对象数组类型的参数。可以使用Extract
和Array
类型来判断传入的参数是否为对象数组类型:
class ObjectArray<T extends object> {
private array: T[];
constructor(array: T[]) {
if (Array.isArray(array) && array.every(item => typeof item === 'object')) {
this.array = array;
} else {
throw new Error('参数必须为对象数组类型');
}
}
// 其他方法和属性
}
在上述代码中,Array.isArray(array)
用于判断参数是否为数组类型,array.every(item => typeof item === 'object')
用于判断数组中的每个元素是否为对象类型。如果判断条件不满足,则抛出错误。
使用示例:
const objArray = new ObjectArray([{ name: 'Alice' }, { name: 'Bob' }]);
上述示例中,objArray
是一个ObjectArray
的实例,传入的参数为对象数组类型,符合泛型类的限制。
如果传入的参数不是对象数组类型,则会抛出错误:
const objArray = new ObjectArray([1, 2, 3]); // 抛出错误:参数必须为对象数组类型
总结:
通过使用类型约束和条件类型,可以使TypeScript泛型类仅限于对象数组的类型。在泛型类的构造函数中,通过判断传入的参数是否为对象数组类型,来限制泛型类的使用范围。
领取专属 10元无门槛券
手把手带您无忧上云