【问题标题】:How to remove implicit declaration in TypeScript如何删除 TypeScript 中的隐式声明
【发布时间】:2021-07-09 19:36:33
【问题描述】:

我想删除我的隐式声明错误:

元素隐式具有“任意”类型,因为“字符串”类型的表达式不能用于索引类型“{ 1: { length: number; }; 2:{长度:数字; }; 3:{长度:数字; }; 4:{长度:数字; }; }'

我是否为特定功能声明和接口?每当访问 steps 常量的索引时,都会发生此错误。

interface Step {
  length: number
}

interface Steps {
  [index: number]: Step
}

const min_x = 0
const max_x = 1
const steps = {
  1: { length: 1 },
  2: { length: 1 },
  3: { length: 1 },
  4: { length: 1 }
}
const sum = Object.keys( steps ).reduce( ( sum, key ): number => sum + parseFloat( steps[key].length || 0 ), 0 )
let start = min_x
Object.keys( steps ).forEach( ( key: any ) => {
  steps[ key ][`start`] = start;
  steps[ key ][`stop`] = start + ( steps[ key ].length / sum );
  start = start + ( steps[ key ].length / sum );
} )

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这对你在 ts 操场上工作正常吗?

    界面步骤{ 长度:数字 开始?:号码 停止?:数字 }

    interface Steps {
        [index: number]: Step
    }
    
    const min_x = 0
    const max_x = 1
    const steps: Steps = {
        1: { length: 1 }
    }
    
    const sum = Object.keys(steps).reduce((sum, key): number => sum + steps[+key].length, 0)
    let start = min_x
    Object.keys(steps).forEach((key: any) => {
        steps[key][`start`] = start;
        steps[key][`stop`] = start + (steps[key].length / sum);
        start = start + (steps[key].length / sum);
    })
    

    【讨论】:

      【解决方案2】:

      试试下面的sn-p,可以参考我改过的代码。

      interface Step {
        length: number,
        start?: number,
        stop?: number
      }
      
      interface Steps {
        [index: string]: Step // index type is string or number, string would be better.
      }
      
      const min_x = 0
      const max_x = 1
      const steps: Steps = {
        1: { length: 1 },
        2: { length: 1 },
        3: { length: 1 },
        4: { length: 1 }
      }
      
      // parseFloat only accepts type of string
      const sum = Object.keys( steps ).reduce( ( sum, key ): number => sum + parseFloat( String(steps[key].length || 0) ), 0 )
      let start = min_x
      Object.keys( steps ).forEach( ( key ) => {
        steps[ key ][`start`] = start;
        steps[ key ][`stop`] = start + ( steps[ key ].length / sum );
        start = start + ( steps[ key ].length / sum );
      } )
      

      【讨论】:

        猜你喜欢
        • 2014-01-20
        • 1970-01-01
        • 2017-10-14
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2013-09-24
        • 1970-01-01
        相关资源
        最近更新 更多