gpt4 book ai didi

typescript - 为什么 Typescript 需要 infer 关键字?

转载 作者:行者123 更新时间:2023-12-03 07:31:12 24 4
gpt4 key购买 nike

为什么 Typescript 的人会创建 infer关键词?
根据documents ,这是您将如何使用它的示例:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

我不明白为什么需要这样做。为什么不能只是:
type ReturnType<T> = T extends (...args: any[]) => R ? R : any;

为什么这不起作用?为什么是 infer关键字必要吗?

最佳答案

infer ,编译器确保您已显式声明所有类型变量。例如。可以定义类型变量:

  • 之后 inferextends条件类型的子句 → RT extends (...args: any[]) => infer R
  • 在类型声明的左侧 → TReturnType<T> = ...
  • 作为 mapped type 的一部分→ Ktype Mapped<T> = { [K in keyof T]: ... }

  • 现在使用未声明的类型参数会导致编译错误。无 infer ,编译器不知道,如果你想引入一个额外的类型变量(比如 R )来推断,或者如果 R只是一个意外的打字错误/打字错误。
    type R = { a: number }

    type MyType<T> = T extends infer R ? R : never; // infer new variable R from T
    type MyType2<T> = T extends R ? R : never; // compare T with above type R
    type MyType3<T> = T extends R2 ? R2 : never; // error, R2 undeclared

    type T1 = MyType<{b: string}> // T1 is { b: string; }
    type T2 = MyType2<{b: string}> // T2 is never
    Playground

    关于typescript - 为什么 Typescript 需要 infer 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60067100/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com