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

时间:2020-08-14 00:32:43

标签: 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' }) { ... }

这按预期工作。所有值均为默认值(“ foo”,“ 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)成为默认值呢?如果可能的话,不要让我知道。到目前为止,我只是不知道一种更好的方法。

1 个答案:

答案 0 :(得分:0)

@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
    };
}