TypeScript 自定义数组索引类型

0s7z1bwu  于 5个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(56)

搜索词

自定义数组索引类型

建议

数组是通过整数进行索引的,很酷。但它们也可以被索引为类似于整数的东西,例如枚举类或 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的其他部分保持一致。

我对最后一个子弹不太清楚。提案中涉及到一些“运算符重载”,我不确定这是否是不合格的,或者是否有其他方法可以实现。

vjrehmav

vjrehmav2#

@MartinJohns 嗯,我想这应该可以解决吧?但我想要的是一个比通用哈希Map更严格的数据结构,它专门用于处理类似数字的键。因此,我希望它会少一些争议。

相关问题