我有一个看起来像这样的界面
export interface IAppSection {
key: string;
order: number;
header: string;
content: string;
modifiedAt: string;
modifiedByEmployeeId: number;
change: 'added' | 'removed' | 'updated' | 'none';
}
我想做的是change
默认为none
当该接口相关的对象被存储时。
我努力了change: 'added' | 'removed' | 'updated' | 'none' = 'none'
但这不起作用。
我确信我在这里做错了什么,并且非常感谢一些关于我如何实现这一目标的反馈。
你不能用接口来做到这一点。接口在运行时被完全擦除,不会影响运行时行为;这是设计使然。您可以创建一个类并向该字段分配默认值,或者您可以创建一个将分配默认值的函数。
我们甚至可以构造一个函数来帮助我们创建具有默认值的函数:
interface IAppSection {
key: string;
order: number;
header: string;
content: string;
modifiedAt: string;
modifiedByEmployeeId: number;
change: 'added' | 'removed' | 'updated' | 'none';
}
function withDefaults<T>() {
return function <TDefaults extends Partial<T>>(defs: TDefaults) {
return function (p: Pick<T, Exclude<keyof T, keyof TDefaults>> & Partial<TDefaults>) :T {
let result: any = p;
for (let k of Object.keys(defs)) {
result[k] = result[k] || defs[k];
}
return result;
}
}
}
const appSection = withDefaults<IAppSection>()({
change: 'none'
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)