【问题标题】:Type guard don't work with generic params?类型保护不适用于通用参数?
【发布时间】:2020-08-26 20:38:04
【问题描述】:

例子:

type SomeType = {
    foo: string;
} | undefined;

function someFn<TParams extends SomeType>(params1: SomeType, params2: TParams): void {
  if (params1) {
    Object.entries(params1);
  }
  if (params2) {
    Object.entries(params2); // here is an error
  }
}

TypeScript 无法确定 params2 不包含未定义。对此有合理的解释,还是 TypeScript 中的错误?

在线演示here

【问题讨论】:

标签: typescript typescript-generics


【解决方案1】:

这是 typescript 中的一个未解决问题 (https://github.com/microsoft/TypeScript/issues/4742)。自动类型保护和泛型并不总是一起工作。作为一种可能的解决方法,您可以手动定义此类型保护:

type SomeType = {
    foo: string;
} | undefined;

function isDefined<T> (v: T): v is Exclude<T, undefined> {
  return v !== undefined
}

function someFn<TParams extends SomeType>(params1: SomeType, params2: TParams): void {
  if (params1) {
    Object.entries(params1);
  }
  if (isDefined(params2)) {
    Object.entries(params2);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2020-01-14
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多