【问题标题】:Conditional type check for undefinedundefined 的条件类型检查
【发布时间】:2023-02-09 00:42:21
【问题描述】:
对于代码
type stringUndefined = "string" | undefined;
type What<T> = T extends undefined ? "true" : "false";
const no : What<stringUndefined> = "";
没有变成"true" | "false"而不是我所期望的"true"
TS-Playground
编辑:
启用严格空检查
【问题讨论】:
标签:
typescript
types
conditional-types
【解决方案1】:
"string" | undefined 不会扩展 undefined,因为它可以是 "string"。
但是 undefined 扩展了 "string" | undefined,因为联合的成员扩展(细化)了联合。所以:
type StringLiteralOrUndefined = "string" | undefined;
type What<T> = undefined extends T ? true : false;
type X = What<StringLiteralOrUndefined>;
// ^? type X = true
type UnrelatedType = string | number;
type Y = What<UnrelatedType>;
// ^? type Y = false
Playground