首页 > 解决方案 > 在“SurveySettingTypes”类型上找不到具有“字符串”类型参数的索引签名

问题描述

我想要一个像这样的obj:

type SurveySettingTypes = {
  validity_period?: string 
  validity_start_time?: string
  validity_end_time?: string 
}
    let initSettingData: SurveySettingTypes = {}
    Object.keys(survey).forEach(row => {
      if (settingDataKeys.includes(row)) {
        // Err: No index signature with a parameter of type 'string' was found on type 'SurveySettingTypes'
        initSettingData[row] = survey[row]
      }
    })

但如果我这样写

type SurveySettingTypes = {
  [key: string]:{
  validity_period?: string 
  validity_start_time?: string
  validity_end_time?: string }
}

我得到的价值

   let initSettingData: {[key: string] :SurveySettingTypes} = {}
   
   initSettingData.editor_validity_period_switch = true // Err: Type 'true' has no properties in common with type 'SurveySettingTypes'

我应该怎么办?帮助我,谢谢!

标签: reactjstypescript

解决方案


Object.keys返回一个数组string。它不保证字符串与 的键完全匹配SurveySettingTypes,因此会发出警告。您需要明确保证来自的字符串数组Object.keys确实是SurveySettingTypes. 你可以这样做:

TS游乐场

type SurveySettingTypes = {
  validity_period?: string ;
  validity_start_time?: string;
  validity_end_time?: string ;
}

const survey: Record<string, string> = {
  validity_period: 'wqwe',
  validity_start_time: 'wewe',
  validity_end_time: 'wewewe'
}

const settingDataKeys = ['validity_period', 'validity_start_time'];

let initSettingData: SurveySettingTypes = {}
Object.keys(survey).forEach(row => {
    if (settingDataKeys.includes(row)) {
    // Guarantee the row is type of SurveySettingTypes's key
    initSettingData[row as keyof SurveySettingTypes] = survey[row]
    }
});

推荐阅读