typescript如何给interface的值加默认值

新手上路,请多包涵
interface a{
    type:string,
    width?:number,
    height?:number,
}
let fun=(p:a){...do something}

如上述情况,如果我想设置width和height如果没有就设置默认值要怎么写,要考虑可能这种非必填但是要默认值的属性很多的情况下要怎么处理

阅读 31.9k
3 个回答
interface IStyle {
  width: number;
  height: number;
}

function show(style: IStyle = { width: 200, height: 300 }): void {
  console.log(style)
}

show(); // {width: 200, height: 300}
show({ width: 1, height: 2 }); //{width: 1, height: 2}
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实例化对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏