typescript 我能给予一个函数一个有用的泛型类型吗?这个函数复制一个对象,并添加一个键或用一个新值替换它,

toe95027  于 2023-03-09  发布在  TypeScript
关注(0)|答案(1)|浏览(70)

我已经编写了以下函数:

function extend(obj, key, value) {
    return { ...obj, [key]: value }
}

理想情况下,我希望能够通用地使用这个函数,其中objObject,其类型在调用点是已知的,key是字符串,在调用点是常量,value是值,其类型在调用点是已知的。并且与该关键字相关联的旧值可以是与新的value相同的类型,也可以不是。
我已经浏览了Utility Types reference,但是我看不到任何允许我为extend编写有用类型的东西,这可能吗?

7d7tgy0s

7d7tgy0s1#

您需要generics(阅读整个页面以了解这里发生了什么):

function extend<T extends object, Key extends PropertyKey, Value>(obj: T, key: Key, value: Value): T & Record<Key, Value> {
    return { ...obj, [key]: value } as T & Record<Key, Value>;
}

Playground

相关问题