簡體   English   中英

Typescript:將默認值應用於嵌套在可選 object 中的可選字段

[英]Typescript: Apply default values to optional fields nested in an optional object

我正在制作一個有很多選項的組件庫。 如果未傳入options object,我需要將objects值的所有字段設為默認值。 從那里開始,如果未傳入該字段,我需要將options object 的每個字段設為默認值。

目前我能做的最好的事情是提供一個默認值,如果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 object,但未提供特定字段,我如何才能將字段(選項 1、2 和 3)設為默認值? 如果可能,請告訴我是否不鼓勵這樣做。 到目前為止,我只是不知道更好的方法來做到這一點。

正如@AndrewLi 所指出的,go 的最佳方法是將參數傳播到包含默認值的 object 中,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM