typescript - 如何更改 Typescript 中字段的类型?
问题描述
我需要 Typescript 中的一个函数,该函数将对象作为参数并将值分配给该对象的某个属性,但该值的类型将与原始对象不同。
因此,例如,当{x: boolean, y: number}
我想将一个类型的对象分配'Hello World'
给 fieldy
时,这当然是不可能的,因为 y 是 a number
,但是在高级类型的帮助下,我可以构建一个 workarround。
// Change the type
type ChangeType<Of, To, Where extends keyof Of> = {
[K in keyof Of]: K extends Where ? To : Of[K]
}
使用ChangeType
我可以像这样更改对象:
// Of To Where
let x: ChangeType<{x: boolean, y: number}, string, 'y'> = {
x: true,
y: 'Hello World'
}
现在我想将它概括为一个通用函数,这就是我尝试过的:
let change = <T, U, Condition extends keyof T>(entity: T, new_value: U, property: Condition): ChangeType<T, U, Condition> => {
return {...entity, [property]: new_value}
}
但我收到以下类型错误:
输入 'T & { [x: string]: U; }' 不可分配给类型 'ChangeType'.ts(2322)
那么如何以通用方式更改对象字段的类型?
解决方案
推荐阅读
- javascript - 使用 Laravel 应用程序中的 Google 表格打开 Excel 文档
- javascript - 在 React Native Expo App 的 config.js 文件中检索 Firebase 数据
- python - 有什么更好的办法?导入模块是导入模块还是导入 2 个模块?
- python - 如何将来自 opencv 的输出视频存储到 Dash 的 dcc.store 组件中(Plotly)
- android - 从文件中读取 Fastfile 的密码 - Android
- pdf - 使用 poppler 生成的 XML 中的坐标来构建电子邮件模板
- java - 如何使用休眠创建订单实体?
- python - Cookiecutter 将一个文件夹复制到多个不同名称的文件夹
- php - 我在 PHP 文件中找到的这种语法“{!!”是什么?
- latex - 超链接未在 Overleaf 中给出边框