TypeScript 接口字符串属性的默认值

2024-02-07

我有一个看起来像这样的界面

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(使用前将#替换为@)

TypeScript 接口字符串属性的默认值 的相关文章

随机推荐