元素隐式具有“任何”类型,因为类型的表达式

Posted

技术标签:

【中文标题】元素隐式具有“任何”类型,因为类型的表达式【英文标题】:Element implicitly has an 'any' type because expression of type 【发布时间】:2020-07-09 07:40:23 【问题描述】:

这是我将鼠标悬停在 limit-entries.ts 中的 data[command] 上时得到的完整错误

(参数)数据:dataProps 元素隐式具有“任意”类型 因为“每小时”类型的表达式不能用于索引类型 '数据道具'。 “dataProps”类型上不存在属性“hourly”

darkSkyApiTypes.ts

interface dataProps 
  data: 
    latitude: number
    longitude: number
    timezone: string
    currently?: 
      time: number
      summary: string
      temperature: number
      humidity: number
    
    hourly?: 
      summary: string
      icon?: string
      data: 
        time: number
        temperature: number
        humidity: number
      []
    
    daily?: 
      summary: string
      icon?: string
      data: 
        time: number
        temperatureMin: number
        temperatureMax: number
        humidity: number
      []
    
  


export = dataProps

limit-entries.ts

import  hourlyLimit  from '../config'
import dataProps from '../API/darkSkyAPITypes'

const limitEntries = (data: dataProps, command: string) => 
  let entries

  switch (command) 
    case 'currently':
      entries = data[command]
      break
    case 'hourly':
      entries = data[command].data.slice(0, hourlyLimit)
      break
    case 'daily':
      entries = data[command].data
      break
    default:
      entries = data[command]
  

  return entries


module.exports = limitEntries

我收到标题错误。救命!

【问题讨论】:

旁注:TypeScript 中压倒性的约定是非内置类型以大写字母开头。所以DataProps 而不是dataProps 【参考方案1】:

dataProps 定义了一个具有单个***属性的对象类型,称为data。您的data 变量的类型为dataProps,因此您需要data.data 来引用该属性。所以你有data[command],你应该有data.data[command]。 (或者更改dataProps的定义。)

【讨论】:

以上是关于元素隐式具有“任何”类型,因为类型的表达式的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型

TypeScript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型

元素隐式具有“任何”类型,因为字符串类型的表达式 | number 不能用于索引类型

如何使用命名数组的接口:元素隐式具有“任何”类型,因为索引表达式不是“数字”类型

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 - Phaser

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 React Typescript