gpt4 book ai didi

TypeScript 通用默认类型与上下文类型

转载 作者:行者123 更新时间:2023-12-03 20:43:05 26 4
gpt4 key购买 nike

在 TypeScript 中,我们有 上下文打字 ,当未定义泛型类型时,TypeScript 将尝试从返回值推断正确的类型。
在大多数情况下,它工作正常。但有时它会变得奇怪。就我而言,当函数参数未定义时,有时不使用通用默认类型,这是不期望的。
👇例子&TS Playground link

type State = { count: number } 

declare function simple<T = State>(second?: T): T;
const { count: countA } = simple()
// in 4.0+ => countA: number
// in 3.9 => countA: any;

declare function complex<M, T = State>(first: M, second?: T): T;
const { count: countB } = complex(1)
// countB: any;

我想问一下,这是TypeScript的bug,还是有什么 优先级 确定要推断的类型,返回类型还是泛型默认类型?

最佳答案

is this a TypeScript bug, or is there some kind of priority to determine which type to infer from, the return type or the generic default type?


这对我来说似乎是一个带有解构分配的 TS 错误。 const {b} = fn();应该等同于 const tmp = fn(); const {b} = tmp或到 const b = fn().b .我完全不知道为什么把它写成 const {b} = fn()会破坏推断的类型。
type State = { count: number } 
declare function complex<M, T = State>(first: M, second?: T): T;
const { count: countB } = complex(1) // FAILS
const state = complex(2); // works!
const {count: countC} = state;
const countD = complex(3).count; // works!
let tmp;
const { count: countE } = tmp = complex(4); // works!
playground

关于TypeScript 通用默认类型与上下文类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66491541/

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