Mis*_*ian 3 typescript typescript-3.6
我有这门课
export class dialogConfig {
title: String;
message?: String;
okText?: String;
withDecline?: false;
width?: Number;
height?: Number;
}
Run Code Online (Sandbox Code Playgroud)
我有这个功能
openDialog(config:dialogConfig){
...
});
Run Code Online (Sandbox Code Playgroud)
我想这样调用这个函数
openDialog({
title: 'viola'
}
Run Code Online (Sandbox Code Playgroud)
其余未指定的参数,我想设置默认值。我怎样才能做到这一点。
jca*_*alz 13
关于这个问题可能应该改变的事情:
dialogConfig应该是DialogConfig,因为在 TypeScript 中命名对象类型通常以大写字母开头。首字母小写的标识符通常表示变量名称或可能的原始类型。
我怀疑你应该使用 aninterface而不是class。该值{title: "viola"}实际上并不是运行时任何此类类的实例。您可以将 a 用作class an ,这就是interface为什么openDialog({title: "viola"})不是错误,但直接使用 an 更简单interface。除非你正在写new DialogConfig()或者instanceof DialogConfig你不需要class。如果你正在写这些东西,你应该非常小心非实例文字,比如{title: "viola"}.
Number应该是number并且String应该是string。 使用原始数据类型的大写版本几乎总是错误的。
false可能应该是boolean,除非您说withDecline在指定时应该始终是false。这是可能的,但我对这如何与指定默认值的预期用例一起工作感到困惑。如果你想withDecline成为true,那么你就想成为boolean。
这给了我们这个:
interface DialogConfig {
title: string;
message?: string;
okText?: string;
withDecline?: boolean;
width?: number;
height?: number;
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,这是我分配默认值的方式:
const defaultValues = {
message: "",
okText: "",
withDecline: false,
width: 0,
height: 0
}
function openDialog(config: DialogConfig) {
const filledInConfig: Required<DialogConfig> = { ...defaultValues, ...config };
console.log(JSON.stringify(filledInConfig));
};
Run Code Online (Sandbox Code Playgroud)
在这里,我使用一个名为 的对象defaultValues,并使用对象扩展创建一个包含所有属性的新值defaultValues,然后用 的所有属性覆盖该新值config。假设config没有任何显式包含的undefined属性,这将导致filledInConfigtype 的值,与所需的所有属性Required<DialogConfig>相同,而不是将其中一些属性作为可选的。DialogConfig
如果您不想使用对象传播,还有Object.assign():
const filledInConfig: Required<DialogConfig> = Object.assign({}, defaultValues, config);
Run Code Online (Sandbox Code Playgroud)
无论哪种方式都会产生期望的结果:
openDialog({
title: 'viola'
});
// {"message":"","okText":"","withDecline":false,"width":0,"height":0,"title":"viola"}
Run Code Online (Sandbox Code Playgroud)
好的,希望有帮助;祝你好运!
| 归档时间: |
|
| 查看次数: |
12150 次 |
| 最近记录: |