typescript - 如何将变量从一种类型转换为另一种类型?
问题描述
我正在获取一些包含元数据字段的数据,我想将其删除。它出现在我的类型变量中,如下所示:
type MainRecord = {
id: string
fieldOne: string
related: RelatedRecord[]
__typename: string
}
type RelatedRecord = {
id: string
fieldTwo: string
__typename: string
}
我正在使用 Formik 更新记录,但我不希望在__typename
为表单创建初始值时包含这些字段,因为尝试将包含元数据的数据发送到服务器会导致查询时出现语法错误。我对 Formik 表单有单独的类型,如下所示:
type MainFields = {
id: string
fieldOne: string
related: RelatedFields[]
}
type RelatedFields = {
id: string
fieldTwo: string
}
我的解决方案是尝试将MainRecord
数据转换为MainFields
看起来像它的工作的对象,因为fields.__typename
它不是一个有效的属性,也不是fields.related[0].__typename
。
const record: MainRecord = {
id: "10",
fieldOne: "Foo",
__typename: "Main",
related: [
{
id: "20",
fieldTwo: "Bar",
__typename: "Related"
},
{
id: "21",
fieldTwo: "Baz",
__typename: "Related"
},
]
}
const fields: MainFields = record // or "as MainFields"
但是,当您记录fields
变量时,元数据仍然存在并且不应该存在。
console.log("fields: ", fields);
我想我可以手动以编程方式将它们剥离,但必须有更好的方法。有任何想法吗?我确定有一种打字稿方式可以完成此任务,但我只是不知道。
解决方案
我不认为 TypeScript 在你使用as
关键字时实际上会发生变化,它只会以“如果你这么说”的类型方式将其“视为”适当的类型。
您最好的选择是使用您自己的实用程序或类似 lodash 的工具对属性进行过滤。
请参阅似乎正在考虑类似问题的这个问题。
推荐阅读
- css - 摩纳哥编辑器智能感知不是全高
- sockets - TCP 服务器连接失败的原因是什么?
- java - MediaPlayer 对象应该如何在 android 中工作?
- docker - 如何在 ipython 中渲染 matplotlib 图
- python - 没有 ORM 的烧瓶纯 SQL
- mysql - MySQL 赋予用户权限而不拥有它们
- reactjs - 如何从组件访问父组件的状态
- javascript - MongoDB 并发问题 - FindOne,然后 FindOneAndUpdate 原子性
- python - 正则表达式错误:在位置 0 没有可重复的内容
- angular - 为 SAM 配置 CORS。API 适用于邮递员,但不适用于 Angular