type modelData = {
a: Record<string, any>[],
b: string[],
c: string[],
}
type userData = {
d: string[],
}
type OneOf<T, U> = ({ [K in keyof T]?: undefined } & U) | ({ [K in keyof U]?: undefined } & T) extends infer O
? { [K in keyof O]: O[K] }
: never;
// 让modelOrUser符合其中一个类型, 且不能符合另一个类型, 这个oneOf该怎么实现呢
type modelOrUser = OneOf<modelData, userData>
interface tes extends modelOrUser {
qq: string
}
从 TypeScript 类型定义上来说,如果一个变量 A 或者 B 类型中的一种,会声明为
A | B
,但到底是哪一种,只有运行时才能分析出来。运行时一般通过类型断言函数来动态检查类型,并通过断言语法告诉编译器根据返回的 boolean 类型来判断是否可断言为某种特定类型。示例不用写了,上面链接有,可以抄一个: