typescript - 打字稿:从泛型类型中获取文字值
问题描述
是否可以从类型中获取文字值?例如:
const createRecord = <T>(type: T, data: number) => ({ type, data })
const r = createRecord<'TYPE_1'>('TYPE_1', 101)
// The type of `r` is { type: "TYPE_1"; data: number; }
但我想省略第一个参数并简单地写:
const createRecord = <T>(data: number) => ({ type: typeof T, data })
const r = createRecord<'TYPE_1'>(101)
当然前面的例子不起作用,因为typeof T
它是一个类型,而不是一个值。
解决方案
你的函数createRecord
返回一个对象,一个对象是一个值,所以type
属性也必须有一个值,而不仅仅是一个类型。你可以做的是让 TypeScriptT
从你给出的值中推断出类型。如果您将泛型类型限制为string
(或number
等),TypeScript 只会推断文字类型。
您可以像这样创建函数:
const createRecord2 = <T extends string>(type: T, data: number) => ({ type, data })
然后你做
const r2 = createRecord2('TYPE_1', 101)
r2.type // type is inferred as 'TYPE_1'
请注意,我没有T
在调用时指定类型,它是从给定的参数推导出来的。
看到这里的区别:操场
推荐阅读
- snowflake-cloud-data-platform - Snowflake 上的区域,如果我们有两个区域,设置 VPN 的最佳做法是什么
- reporting-services - 根据值计数将自定义渐变应用于图表
- python - 正则表达式查找星号(仅当不被数字包围时)
- javascript - Semantic UI React - 当下拉选项列表仍然打开时不触发 onChange
- c++-cli - 停留在对 Windows 窗体 C++ 的循环依赖上
- r - 如何旋转 3D 散点图
- javascript - 尝试从 vue.js 中的 http 请求推送到数组时出错
- python - 如何通过 Python 使用 Selenium 定位按钮元素
- python - 使用 Flask 流式传输随机音频
- pandas - Filtering a pandas dataframe by aggregating on two columns