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

时间:2018-05-09 20:03:03

标签: typescript

假设我的界面 A 如下所示:

interface A {
  prop1: string
  prop2: string
}

我像这样初始化对象 obj

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

有没有办法将 obj 强制转换为 A 并自动设置 obj 中未定义但 A <中所需的任何属性/ strong>到nullundefined?我想在可能的情况下仅在变量初始化时使用partials,并在函数params中坚持“full”类型。

我无法将 A 更改为班级。

1 个答案:

答案 0 :(得分:1)

这个答案还很晚,但是我会留待以后再遇到。

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' }

如果要将缺少的属性设置为undefined,则可以使用相同的函数,但是无法将返回的对象强制转换为A,因为A要求所有属性均为字符串而不是nullundefined