type Has2<T extends readonly any[], U> = T[number] extends U ? true : never;
type UU = ['Kars', 'Esidisi'];
type AA = Has2<UU, 'Kars'>;
我认为 AA 应该是类型 true,但类型从来都不是 我不知道为什么
我尝试询问chatGPT,但它的答案是AA类型是正确的
当您使用 UU
["Kars", "Esidisi"]
中
索引访问元组
Has2
(=
T[number]
) 时,您将获得联合类型
"Kars" | "Esidisi"
。在您的示例中,您实际上检查是否
"Kars" | "Esidisi" extends "Kars"
。或者换句话说,您希望
"Kars" | "Esidisi"
可以分配给
"Kars"
。然而,这种情况并非如此。处理联合时,仅当您要分配的类型的联合成员少于目标类型时,分配才有效。 您可能想像这样反转条件:
type Has2<T extends readonly any[], U> = U extends T[number] ? true : never;
type UU = ["Kars", "Esidisi"];
type AA = Has2<UU, "Kars">;
// ^? type AA = true
type Test<T, U> = T extends U ? true : never
type Result = Test<'A' | 'B', 'A'> // type Result = true
type Test2<T extends any[], U> = T[number] extends U ? true : never
type Result2 = Test<['A', 'B'], 'A'> // type Result2 = never
其实我想知道Test和Test2有什么区别