Typescript 接口默认值

新手上路,请多包涵

我在 TypeScript 中有以下界面:

 interface IX {
    a: string,
    b: any,
    c: AnotherType
}

我声明该类型的变量并初始化所有属性

let x: IX = {
    a: 'abc',
    b: null,
    c: null
}

然后我稍后在 init 函数中为它们分配实际值

x.a = 'xyz'
x.b = 123
x.c = new AnotherType()

但是我不喜欢在声明对象时为每个属性指定一堆默认的空值,因为它们稍后将被设置为实际值。我可以告诉接口将我不提供的属性默认为 null 吗?什么会让我这样做:

 let x: IX = {
    a: 'abc'
}

没有得到编译器错误。现在它告诉我

TS2322:类型“{}”不可分配给类型“IX”。类型“{}”中缺少属性“b”。

原文由 d512 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

我可以告诉接口将我不提供的属性默认为 null 吗?什么会让我这样做

不可以。您不能为接口或类型别名提供 _默认值_,因为它们只是编译时的,默认值需要运行时支持

选择

但未指定的值在 JavaScript 运行时默认为 undefined 。因此,您可以将它们标记为可选:

 interface IX {
  a: string,
  b?: any,
  c?: AnotherType
}

现在,当您创建它时,您只需要提供 a

 let x: IX = {
    a: 'abc'
};

您可以根据需要提供值:

 x.a = 'xyz'
x.b = 123
x.c = new AnotherType()

原文由 basarat 发布,翻译遵循 CC BY-SA 4.0 许可协议

我需要这个作为 React 组件。

您可以使用 Nullish Coalescing 运算符,如果左侧值为 Null 或未定义,它将分配一个默认值:

 interface IX {
    a: string,
    b?: any,
    c?: AnotherType
}

const ixFunction: React.FC<IX> = (props) => {
  console.log(props.b?? "DefaultValue")
}

但这仅在您只想在一个地方使用该变量时才有效。

原文由 papierkorp 发布,翻译遵循 CC BY-SA 4.0 许可协议

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