Typescript:将默认值应用于嵌套在可选对象中的可选字段



我正在制作一个有很多选项的组件库。如果没有传入options对象,我需要objects值的所有字段都是默认值。从那里开始,如果没有传入字段,我需要options对象的每个字段都是默认值

目前,如果options值根本没有提供以下代码,我能做的最好的事情就是提供默认值:

interface Foo {
bar;
options?: {
option1?: string;
option2?: string;
option3?: string;
};
}
function foo({ bar, options = { option1: 'foo', option2: 'bar', option3: 'baz' }) { ... }

这是意料之中的事。所有值都是默认值('o'、'bar'和'baz'(。但是,如果添加一个或多个字段,则无法实现此操作。

所需输出/功能:

foo(x);
option1 = 'foo'
option2 = 'bar'
option3 = 'baz'

foo(x, { option1: 'hello world' });
option1 = 'hello world'
option2 = 'bar'
option3 = 'baz'

等等。

如果提供了options对象,但没有提供特定字段,如何将字段(选项1、2和3(设置为默认值?如果可能的话,请告诉我是否不鼓励这样做。到目前为止,我只是不知道更好的方法。

正如@AndrewLi所指出的,最好的方法是将参数扩展到一个包含默认值的对象中,比如:

interface Options: {
option1?: string;
option2?: string;
option3?: string;
}
function foo(props: { bar: string, options: Options }) {
const {
option1,
option2,
option3
}: Options = { 
option1 = 'foo',
option2 = 'bar',
option3 = 'baz',
...props.options
};
}

最新更新