Typescript 函数参数的类型应为对象的键类型之一
用打字机, 我有一个功能:-Typescript 函数参数的类型应为对象的键类型之一,typescript,Typescript,用打字机, 我有一个功能:- function updateSetting(settingName, settingValue: string[]| number | null) { this.props.updateSetting({[settingName]}: settingValue) } 我也有一个对象,所以我有一个接口 interface Setting { names: string[] city: string | null
function updateSetting(settingName, settingValue: string[]| number | null) {
this.props.updateSetting({[settingName]}: settingValue)
}
我也有一个对象,所以我有一个接口
interface Setting {
names: string[]
city: string | null
age: number
}
所以,我想使用object作为参数,我还想将对象的一个属性作为参数传递,该参数是在运行时确定的。因此,在我的函数设置中,name可以是'name'或'city'或'age',因此我想从接口本身分配类型
我不想写setingvalue:string[]| number | null我想写类似这样的东西
settingValue: valueof Setting
因为设置值可以是任何类型名称、城市、年龄
如何在typescript中实现这一点?如果要设置设置值的类型和界面动态,可以尝试:
settingValue: Setting[keyof Setting]; // string[]| number | null
或者,如果您想要不带类型的设置键:
settingValue = keyof Setting ; // names| city | age
如果要设置settingValue类型和界面动态,可以尝试:
settingValue: Setting[keyof Setting]; // string[]| number | null
或者,如果您想要不带类型的设置键:
settingValue = keyof Setting ; // names| city | age
您可以改进功能,而不仅仅是设置值的类型。您还可以确保设置名称和设置值一致:
function updateSetting<TKey extends keyof Setting>(settingName: TKey, settingValue: Setting[TKey]) {
//...
}
interface Setting {
names: string[]
city: string | null
age: number
}
updateSetting("names", [""])
updateSetting("age", [""]) //error
您可以改进功能,而不仅仅是设置值的类型。您还可以确保设置名称和设置值一致:
function updateSetting<TKey extends keyof Setting>(settingName: TKey, settingValue: Setting[TKey]) {
//...
}
interface Setting {
names: string[]
city: string | null
age: number
}
updateSetting("names", [""])
updateSetting("age", [""]) //error
看看keyof:。它似乎适合您的用例。请查看keyof:。看起来它可以适合您的用例