【发布时间】:2021-12-22 10:58:17
【问题描述】:
我知道这个问题可能不太清楚,但是对于这样抽象的案例来说,提出问题并找到答案是非常困难的,我真的不知道如何更好地表达。
我有以下代码:
enum TagType {
SIMPLE = 'simple',
COLLECTOR = 'collector',
}
interface Tag {
type: TagType,
}
interface SimpleTag extends Tag {
type: TagType.SIMPLE,
}
interface CollectorTag extends Tag {
type: TagType.COLLECTOR,
}
interface ServiceDefinition<T extends Tag> {
tags: T[],
}
// This works.
const definition: ServiceDefinition<Tag> = {tags: []};
const collectorTags: CollectorTag[] = definition.tags.filter((t: Tag): t is CollectorTag => t.type === TagType.COLLECTOR);
// This doesn't work.
class CollectorDefinitionProcessor <T extends Tag> {
process(definition: ServiceDefinition<T>): void {
const collectorTags: CollectorTag[] = definition.tags.filter((t: T): t is CollectorTag => t.type === TagType.COLLECTOR);
}
}
为什么类中的代码是错误的?我们如何在上面的泛型类中区分这个数组的项目?
【问题讨论】:
标签: typescript generics