typescript - 将部分接口类型的对象转换为 TypeScript 中的“完整”接口类型
问题描述
假设我有一个如下所示的接口A:
interface A {
prop1: string
prop2: string
}
我像这样初始化对象obj:
const obj: Partial<A> = { prop1: 'xyz' }
有没有办法将obj转换为A并自动将任何未在obj中定义但在A中需要的属性设置为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
或undefined
推荐阅读
- csv - 如何在 D3.js 中绘制数据以从 csv 文件映射
- terraform - terraform 提供程序版本的输入变量
- windows - 使用 Powershell 使用批处理文件向 Gmail 发送电子邮件
- python - 如何让scrapy定义工作的http前缀?
- python - 在链接中添加单词
- c++ - 如何将数组中的数字相加C++
- r - 如何检测满足 A ∈ B 但 B ∉ A 的情况
- java - 部署图:“部署”一个新颖的执行环境
- python - 是否有支持数据样本的 Min-Max 和 Sum 缩放的 python 包?
- java - 我想通过单击外部 recyclerview 上的按钮来添加内部网格视图