我正在制作一个具有很多选择的组件库。如果未传递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)成为默认值呢?如果可能的话,不要让我知道。到目前为止,我只是不知道一种更好的方法。
答案 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
};
}