reactjs - 在“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'
我应该怎么办?帮助我,谢谢!
解决方案
Object.keys
返回一个数组string
。它不保证字符串与 的键完全匹配SurveySettingTypes
,因此会发出警告。您需要明确保证来自的字符串数组Object.keys
确实是SurveySettingTypes
. 你可以这样做:
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]
}
});
推荐阅读
- r - R中是否有相当于vb.net的instr
- assembly - ARM / AArch64 上的 DIVQ 对应物(用双宽度除数缩小除法)?
- html - 我无法让 adobe 字体出现在我的 Klaviyo 模板电子邮件中
- spring-boot - 使用带有 MySQL 数据库的 Spring Boot Rest API 的一对一映射
- javascript - 随机标签被添加到 contentEditable div?
- javascript - 在我的 JSON 中填充空值(不是 null 或“”)
- javascript - 将事件侦听器直接添加到 createElement() 对象 VueJS
- swift - 当我尝试重新加载日期时,Swift 5 TableView 在 ViewController 中发现 nil
- python - pytesseract image_to_string 不能正常工作
- reactjs - create-react-app:https://registry.npmjs.org/loose-envify 处的无效 json 响应正文