Typescript 类型检查具有混合类型和混合泛型的数组
Posted
技术标签:
【中文标题】Typescript 类型检查具有混合类型和混合泛型的数组【英文标题】:Typescript type check for an array with mixed types and mixed generics 【发布时间】:2021-12-15 20:21:46 【问题描述】:我有以下设置
interface Animal<T>
name: string;
makeNoise: () => T;
enum DogNoise
'bark',
class Dog implements Animal<DogNoise>
name: 'goodboy';
makeNoise()
return DogNoise.bark;
enum CatNoise
'meow',
'purr',
class Cat implements Animal<CatNoise>
name: 'needy';
makeNoise()
return CatNoise.meow;
// what is the correct way to define generic for a mixed array
// knowing that other types of animals could be used (e.g. Cow) is using array the best approach to store them
const pets: Animal<any>[] = [new Cat(), new Dog()];
for (const pet of pets)
// now makeNoise returns any
console.log(pet.makeNoise());
如何为animals
编写类型定义,使pet.makeNoise()
返回正确的类型?
这是否可以通过使用数组以外的东西来存储animals
来实现,或者这种解决问题的方法可能不是最好的?
谢谢!
【问题讨论】:
【参考方案1】:您应该使用联合类型,如以下post
在你的情况下:
动物
【讨论】:
以上是关于Typescript 类型检查具有混合类型和混合泛型的数组的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript 中具有泛型类型参数的泛型类型的替代方案
带有泛型的 Typescript JSX - 参数隐式具有“任何”类型