【问题标题】: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

编辑:

启用严格空检查

【问题讨论】:

  • 使用undefined extends T

标签: 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

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2017-02-05
    • 2016-09-21
    • 2010-11-13
    相关资源
    最近更新 更多