Ceq*_*iel 1 generics type-inference literals 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; }
Run Code Online (Sandbox Code Playgroud)
但我想省略第一个参数并简单地写:
const createRecord = <T>(data: number) => ({ type: typeof T, data })
const r = createRecord<'TYPE_1'>(101)
Run Code Online (Sandbox Code Playgroud)
当然,前面的例子不起作用,因为它typeof T是一个类型,而不是一个值。
你的函数createRecord返回一个对象,一个对象是一个值,所以type属性也必须有一个值,而不仅仅是一个类型。您可以做的是让 TypeScriptT从您提供的值中推断出类型。如果您将泛型类型限制为string(或number等),TypeScript 只会推断文字类型。
您可以像这样创建函数:
const createRecord2 = <T extends string>(type: T, data: number) => ({ type, data })
Run Code Online (Sandbox Code Playgroud)
然后你做
const r2 = createRecord2('TYPE_1', 101)
r2.type // type is inferred as 'TYPE_1'
Run Code Online (Sandbox Code Playgroud)
请注意,我没有T在调用时指定类型,它是从给定的参数中推导出来的。
看这里的区别:操场
| 归档时间: |
|
| 查看次数: |
3060 次 |
| 最近记录: |