Z_pigeon 2023-09-08 11:11 采纳率: 33.3%
浏览 9

ts中enum枚举的使用

定义了取整的枚举,结合Math函数使用时会报ts语法错误


enum  TruncMethod {
    ceil, // 向上取整
    round, // 四舍五入
    floor, // 向下取整
}

let a = TruncMethod[1]
let val = 3.4
console.log(Math[a](val))
  1. 如上面写,会报错。主要是Math[a]这句
    元素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型 "Math"。
    在类型 "Math" 上找不到具有类型为 "string" 的参数的索引签名
    
    可以理解就是使用Math函数的api要确保存在,也就是a的值要确保存在与Math函数中api,做以下改变:a添加类型指定

enum  TruncMethod {
    ceil, // 向上取整
    round, // 四舍五入
    floor, // 向下取整
}

let a: 'ceil' | 'round' | 'floor' = TruncMethod[1]
let val = 3.4
console.log(Math[a](val))
  1. Math函数不会报错了,进入let a: 'ceil' | 'round' | 'floor' = TruncMethod[1]这句报错

    不能将类型“string”分配给类型“"ceil" | "round" | "floor"”
    

    这里不理解,TruncMethod[1]的值是‘round’,为什么赋值会报错

  2. 在上面是显式定义a的类型的,跟枚举TruncMethod定义的内容 重复了,这里到底应该怎么去写这段逻辑才是合理的

  • 写回答

2条回答 默认 最新

  • 呈两面包夹芝士 2023-09-08 11:17
    关注
    
    enum RoundingMode {  
      TO_NEAREST_INTEGER = "toNearestInteger",  
      TO_DOWN = "toDown",  
      TO_UP = "toUp",  
      TO_CEILING = "toCeiling",  
      TO_FLOOR = "toFloor"  
    }  
      
    function roundNumber(value: number, mode: RoundingMode): number {  
      switch (mode) {  
        case RoundingMode.TO_NEAREST_INTEGER:  
          return Math.round(value);  
        case RoundingMode.TO_DOWN:  
          return Math.floor(value);  
        case RoundingMode.TO_UP:  
          return Math.ceil(value);  
        case RoundingMode.TO_CEILING:  
          return Math.ceil(value);  
        case RoundingMode.TO_FLOOR:  
          return Math.floor(value);  
        default:  
          return 0; // 可以根据需要添加默认情况  
      }  
    }  
      
    // 用法示例  
    const value = 3.14159;  
      
    console.log(roundNumber(value, RoundingMode.TO_NEAREST_INTEGER)); // 输出 3  
    console.log(roundNumber(value, RoundingMode.TO_DOWN)); // 输出 3  
    console.log(roundNumber(value, RoundingMode.TO_UP)); // 输出 4  
    console.log(roundNumber(value, RoundingMode.TO_CEILING)); // 输出 4  
    console.log(roundNumber(value, RoundingMode.TO_FLOOR)); // 输出 3
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日

悬赏问题

  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作