gpt4 book ai didi

typescript - 在 typescript 中使用变量字符串

转载 作者:行者123 更新时间:2023-12-04 10:59:39 26 4
gpt4 key购买 nike

我需要一个函数,它改变我的对象中的特定变量:

function updateField(fieldname, newValue){
return {...this.oldObject, fieldname: newValue};
}

我想让它类型安全。 fieldName 的类型是 typeof clazz ,但是 newValue的类型是什么? ?
我知道 typescript Pick ,所以完整的输入将是这样的:
updateField(fieldname: typeof Clazz, newValue: Pick<Clazz, fieldname>): Clazz

但我不知道如何使用非常量字符串。这在 TS 中甚至可能吗?

最佳答案

您可以使用 keyof 将文件名限制为有效的对象键。运算符(operator)。要获得一种类型的值,您可以使用 lookup类型 T[K]哪里T是对象类型和 K是关键类型:

const foo = {
a: 1,
b: 'some string'
};

function update<T, K extends keyof T>(obj: T, key: K, value: T[K]): T {
return {
...obj,
[key]: value,
}
}

update(foo, 'a', 2); // OK
update(foo, 'b', 2); // Error: Argument of type '2' is not assignable to parameter of type 'string'
update(foo, 'c', 2); // Error: Argument of type '"c"' is not assignable to parameter of type '"a" | "b"'

Playground

关于typescript - 在 typescript 中使用变量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58915002/

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