定义了取整的枚举,结合Math函数使用时会报ts语法错误
enum TruncMethod {
ceil, // 向上取整
round, // 四舍五入
floor, // 向下取整
}
let a = TruncMethod[1]
let val = 3.4
console.log(Math[a](val))
- 如上面写,会报错。主要是
Math[a]
这句
可以理解就是使用Math函数的api要确保存在,也就是a的值要确保存在与Math函数中api,做以下改变:a添加类型指定元素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型 "Math"。 在类型 "Math" 上找不到具有类型为 "string" 的参数的索引签名
enum TruncMethod {
ceil, // 向上取整
round, // 四舍五入
floor, // 向下取整
}
let a: 'ceil' | 'round' | 'floor' = TruncMethod[1]
let val = 3.4
console.log(Math[a](val))
Math函数不会报错了,进入
let a: 'ceil' | 'round' | 'floor' = TruncMethod[1]
这句报错不能将类型“string”分配给类型“"ceil" | "round" | "floor"”
这里不理解,
TruncMethod[1]
的值是‘round’,为什么赋值会报错在上面是显式定义a的类型的,跟枚举TruncMethod定义的内容 重复了,这里到底应该怎么去写这段逻辑才是合理的