首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript中的类元组集合

TypeScript中的类元组集合
EN

Stack Overflow用户
提问于 2016-11-01 22:31:28
回答 1查看 346关注 0票数 0

我正在用TypeScript编写一个(玩具)散列和缓存装饰器,找不到一个好的方法来创建一个可靠的通用装饰器。

到目前为止,我掌握的代码是

代码语言:javascript
复制
function cache
  (target: Object,
  propertyKey: string,
  // Likely we can do better than <any> here -- <Function<any>> maybe?
  descriptor: TypedPropertyDescriptor<any>) 
{
  let cacheMap = new Map();
  let wrappedFn = descriptor.value;

  descriptor.value = function (...args: any[]) {
    if (cacheMap.has(args)) {
        console.log("Short-circuiting with result: " + cacheMap.get(args));
        return cacheMap.get(args);
    }
    let result = wrappedFn.apply(this, args);
    cacheMap.set(args, result);
    console.log("cacheMap %o", cacheMap);
    return result;
  }

  return descriptor;
}

当然,这是失败的,因为args不是元组,而是一个列表,即mutable1。因此,每个输入,即使一遍又一遍是相同的,在它自己的内存位置使用自己的散列值(无论来自何处)获取自己的列表/数组。

我还没有在TypeScript (或JS)中找到一个元组类型--有吗?这类问题还有别的解决办法吗?

  1. 这难道不是一个错误吗?Map<T, U>应该限制T实现IHashable或其他什么的,对吗?这就是类型的意义--在你的生活花费大量时间之前提出这个问题。
EN

回答 1

Stack Overflow用户

发布于 2016-11-01 22:52:22

这难道不是一个错误吗?Map<T, U>应该限制T实现IHashable或其他什么的,对吗?

不是的。在JavaScript中,对象标识是一个真正的、定义良好的东西;TypeScript并不试图强迫您假装它不存在。

如果ECMAScript委员会认为对地图实施非基于对象身份的键控是合适的,他们可以限制Map密钥,但他们没有。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40369631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档