gpt4 book ai didi

TypeScript 解构了带有类型或接口(interface)的默认参数

转载 作者:行者123 更新时间:2023-12-04 16:41:54 25 4
gpt4 key购买 nike

我正在编写一个函数,它接受一个可选对象 options,它本身包含一个可选属性 params。此 options 对象具有默认值 {},因此可以在函数签名中对其进行适当的解构。

但是,我在尝试使用界面输入时遇到问题:

type Params = {
params?: { [key: string]: boolean }
}

interface Foo {
(options?: Params): void
};

const myFoo: Foo = ({ params } = {}) => {} // Property 'params' does not exist on type 'Params | undefined'.

错误是有道理的:就编译器所知,options 可能未定义(当参数设置为 optional 时由它解释),所以 params 可能不存在。

但是,它没有考虑到可选 参数可能具有默认值。然而,我还没有找到在类型或接口(interface)中正确指示这一点的方法。直接在函数签名中输入确实有效,但这不能被重用或导出。

在使用类型或接口(interface)时是否有任何标准方法可以解决这个问题?

最佳答案

options 参数在参数列表中 通过myFoo: Foo 的类型推断是Params | undefined,不管实现中是否提供了默认值。只有在 myFoo 的主体中,它才会将 options 推断为 Params 因为默认值:

// hover over options here: Params | undefined
const myFoo: Foo = (options = {}) => {
// hover over options here: Params
options;
};

要修复它,请推迟对象解构,直到完全从实现的默认值推断出 options 的类型:

// no error
const myFoo: Foo = (options = {}) => {
const { params } = options;
};

或者正如您已经发现的那样,您可以通过将参数显式键入为 Params 来帮助类型推断。不过,在某些情况下,这会带来误导编译器的潜在风险:

// no error
const myFoo: Foo = ({ params }: Params = {}) => {};

关于TypeScript 解构了带有类型或接口(interface)的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59146863/

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