我有几个不同的接口,每个接口都包含一个名为type
的属性。
interface Type1 { type: 'key1', name: string }
interface Type2 { type: 'key2', description: string, name: string }
interface Type3 { type: 'key3', cost: number }
Map接口
interface TypeMap {
key1: Type1,
key2: Type2,
key3: Type3
}
和联合类型
type TypeElement = Type1 | Type2 | Type3
Map对象,分别使用每种类型的记录,函数中的每条记录都有自己的类型,就像mapping接口一样
const allTypes: { [key in keyof TypeMap]: (record: TypeMap[key]) => void } = {
key1: (record) => {},
key2: (record) => {},
key3: (record) => {},
}
当我将TypeElement
类型的变量传递给allTypes
的回调函数时,它会给我一个错误
const func = (record: TypeElement) => {
const cb = allTypes[record.type]
return cb(record)
}
这里cb
的类型是((record: Type1) => void) | ((record: Type2) => void) | ((record: Type3) => void)
,但是当我尝试调用它cb(record)
时,它告诉cb
的类型是(record: never) => void
错误为:
- 型别'TypeElement'的参数无法指派给型别'never'的参数。交集'Type 1 & Type 2 & Type 3'已减少为'never',因为属性'type'在某些组成部分中具有恩怨的型别。型别'Type 1'无法指派给型别'never'。*
为什么我会得到这个错误?这有什么问题?我如何将记录传递到cb
而不给我一个错误?record as never
,as any
不是我正在寻找的解决方案!
1条答案
按热度按时间9fkzdhlc1#