interface a{
type:string,
width?:number,
height?:number,
}
let fun=(p:a){...do something}
如上述情况,如果我想设置width和height如果没有就设置默认值要怎么写,要考虑可能这种非必填但是要默认值的属性很多的情况下要怎么处理
interface a{
type:string,
width?:number,
height?:number,
}
let fun=(p:a){...do something}
如上述情况,如果我想设置width和height如果没有就设置默认值要怎么写,要考虑可能这种非必填但是要默认值的属性很多的情况下要怎么处理
interface A {
type: string,
width?: number,
height?: number,
}
let fun = (() => {
const defaultA = {
width: 0,
height: 0,
};
return (p: A) => {
p = { ...defaultA, ...p };
// do your things
};
})();
这里用一个 IIFE 把默认值封起来了,避免在外面不小心修改到。
另外,也可以直接对 width
或者 height
赋值,避免产生新的对象。这个看起来也简单一些。
let fun = (p: A) => {
p.width ??= 0;
p.height ??= 0;
// do your things
};
实际使用中,一个数据模型必须是实现类。接口类主要用来声明类型,方便编译检查。没必要在接口类去设置默认值。比如
class AImpl implements A {
width: number = 1
}
你在代码中都是用AImpl实例化对象
1 回答779 阅读✓ 已解决
3 回答1.3k 阅读