如何解决Typescript无法转换抽象函数数组,导致错误,为什么?
Typescript对此代码抛出错误(摘要-不是真实代码):
export const enum typeList {
a = "aa",b = "bb",c = "cc"
}
export interface parameterEvent<S extends typeList> {
"kind": S;
"detail": DetailTypes[S];
}
export interface DetailTypes {
[typeList.a]: string;
[typeList.b]: boolean;
[typeList.c]: undefined;
}
interface returnTypes {
[typeList.a]: number | string;
[typeList.b]: number;
[typeList.c]: boolean;
}
type Universial<T extends typeList> = (event: parameterEvent<T>) => returnTypes[T];
type collection = {
[T in typeList]: Universial<T>[];
};
const universialGroup: collection = {
[typeList.a]: [],[typeList.b]: [],[typeList.c]: []
};
export function addToUniversalGroup<T extends typeList>(kind: T,val: Universial<T>): void {
const listeners = universialGroup[kind] as Universial<T>[];
}
错误:
将“ collection [T]”类型转换为“ Universial []”类型可能是 错误,因为任何一种类型都不能与另一种类型充分重叠。如果 这是有意的,请先将表达式转换为“未知”。类型 'Universial
[] | Universial [] | Universial []'与类型'Universial []'不具有可比性。 类型'Universial []'与类型不兼容 “ Universial []”。类型'Universial '与 输入“通用”。类型“布尔”与类型不具有可比性 'returnTypes [T]'。
This example on TypescriptLang
一个有趣的事实是,从通用类型中删除event: parameterEvent<T>
可以解决此错误,恕我直言。
我试图了解此示例出了什么问题?为什么会收到此错误消息?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。