我正在研究 Typescript,但我有一些困惑。
type t = number & string // never
type t1 = number & boolean // never
type t2 = number & string[] // number & string[]
Run Code Online (Sandbox Code Playgroud)
为什么看起来不一样?
我注意到 TypeScript 有一些奇怪的地方。我有一个类型联合,其中包含一些数组类型(string[], number[])和一些非数组类型(string, number)。如果我使用类型推断,一切都会按预期进行:
type bar = string | number | string[] | number[];
declare foo: bar;
if (Array.isArray(foo))
{
foo // string[] | number[]
}
else
{
foo // string | number
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将类型直接限制为数组类型并使用类型交集,我会得到一些意想不到的结果:
declare foo: bar & any[];
// expected type: string[] | number[]
foo // (string & any[]) | (number & any[]) | (string[] & any[]) | (number[] & any[])
Run Code Online (Sandbox Code Playgroud)
这是为什么?
不应该string & any[]评估 tonever和string[] …
typescript ×2