将部分接口类型的对象转换为 TypeScript 中的“完整”接口类型

2024-01-09

假设我有一个界面A看起来像这样:

interface A {
  prop1: string
  prop2: string
}

我初始化对象obj像这样:

const obj: Partial<A> = { prop1: 'xyz' }

有什么办法可以投吗obj to A并自动设置未定义的任何属性obj但需要在A to null or undefined?如果可能的话,我只想在变量初始化时使用部分,并坚持函数参数中的“完整”类型。

我无法改变A成为一个班级。


这个答案已经很晚了,但我会留下它,以防以后有人遇到。

Typescript 是关于类型的,它们在编译时用于检查代码是否正确,但在运行时被删除以将代码转换为纯 JavaScript。这意味着,无法使用打字稿功能添加任何属性。

但是,您可以定义一个接受部分对象并设置默认属性的函数:

function complete(obj: Partial<A>): A {
  return Object.assign({
    prop1: 'default1',
    prop2: 'default2'
  }, obj);
}

const partial: Partial<A> = { prop1: 'xyz' }
const a: A = complete(partial)
console.log(a) // { prop1: 'xyz', prop2: 'default2' }

如果您想将缺少的属性设置为未定义,相同的函数也可以工作,但您将无法将返回的对象转换为A, 因为A要求所有属性都是字符串而不是null or undefined

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将部分接口类型的对象转换为 TypeScript 中的“完整”接口类型 的相关文章

随机推荐