gpt4 book ai didi

Typescript 部分类型推断

转载 作者:行者123 更新时间:2023-12-04 16:39:37 26 4
gpt4 key购买 nike

我被这个难住了,如果没有第二个功能,我无法弄清楚如何做到这一点:

interface Fixed { a: number }
const fn = <A, B extends {} = {}>(b: B) => {
return b
}

fn({ a: 1 }) // { a: number }
fn<Fixed>({ a: 1 }) // {}

const fn2 = <A>() => <B extends {} = {}>(b: B) => {
return b
}

const result = fn2<Fixed>()({ a: 1 }) // { a: number }
如果我修复了类型 A,为什么 Typescript 不会推断出 B 的类型?
如果我返回一个函数,该函数又试图推断 B 的类型,一切都会再次运行。

最佳答案

类型推断基于全有或全无原则。在第一种情况下:

fn({ a: 1 })
没有提供泛型类型参数,因此它将推断两者:
  • B将被推断为 { a: number }基于函数参数;
  • A将被推断为 unknown因为它没有在函数的任何地方使用。

  • 在第二种情况下:
    fn<Fixed>({ a: 1 })
    您指定了一种泛型类型,不幸的是这意味着 类型推断将不会用于其余的类型参数 - 所以:
  • A指定为 Fixed ;
  • B没有给出所以而不是推断它会默认为 {} .

  • 尽管这很烦人,但这正是 TypeScript 的工作原理。带有两个函数调用的第二个示例是此问题的常用解决方法。
    相关 issue在 GitHub 上。

    关于Typescript 部分类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63678306/

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