搜索词
自定义数组索引类型
建议
数组是通过整数进行索引的,很酷。但它们也可以被索引为类似于整数的东西,例如枚举类或 Package 数字的类。例如:
class PlayerNumber { constructor(readonly n: number); valueOf() { return this.n; } }
let currentTurn = 3;
const players: Player[];
let currentPlayer = new PlayerNumber(4);
// correct
players[+currentPlayer]
// oops, typo, but no protection
players[+currentTurn]
假设我们有一个TypedArray<K extends { valueOf(): number }, V>,它在所有方面都像Array,只是在任何函数签名中的所有数组索引都是K类型,而在任何函数签名中的所有数组都是TypedArray<K, ...>。而且+也不需要了。那么:
// correct AND AWESOME
players[currentPlayer]
// compiler error
players[currentTurn]
使用场景
我正在编写一个TypeScript游戏框架,到处都是由玩家、令牌类型、回合号等索引的数组,很容易弄错哪个索引放在哪里。
检查清单
我的建议满足以下准则:
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的变化
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法等)
- 这个特性将与TypeScript's Design Goals的其他部分保持一致。
我对最后一个子弹不太清楚。提案中涉及到一些“运算符重载”,我不确定这是否是不合格的,或者是否有其他方法可以实现。
2条答案
按热度按时间w1jd8yoj1#
听起来你想要#37448。
vjrehmav2#
@MartinJohns 嗯,我想这应该可以解决吧?但我想要的是一个比通用哈希Map更严格的数据结构,它专门用于处理类似数字的键。因此,我希望它会少一些争议。