Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 函数参数的类型应为对象的键类型之一_Typescript - Fatal编程技术网

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:。看起来它可以适合您的用例