gpt4 book ai didi

typescript :从通用类型中获取文字值

转载 作者:行者123 更新时间:2023-12-02 14:47:13 25 4
gpt4 key购买 nike

是否可以从类型中获取文字值?例如:

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 属性也必须有一个值,而不仅仅是一个类型。您可以做的是让 TypeScript 从您提供的值中推断出 T 的类型。如果您将泛型类型限制为 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 的类型,它是从给定的参数推导出来的。

看这里的区别:playground

关于 typescript :从通用类型中获取文字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com