javascript - 在 Typescript 中创建(甚至更多泛型)函数

标签 javascript typescript generics

我正在用 Typescript 创建一个简单的哈希表,我有两个函数,一个返回所有键,另一个返回所有值,我得到了这样的东西:

  public values() {
    let values = new Array<T>();
    this._keyMap.forEach((element) =>
      element.forEach((innerElement) => values.push(innerElement.value))
    );
    return values;
  }

  public keys() {
    let values = new Array<string>();
    this._keyMap.forEach((element) =>
      element.forEach((innerElement) => values.push(innerElement.key))
    );
    return values;
  }

我想知道的是将这两个函数压缩成一个函数,因为大部分代码都是重复的,我只需要将类型传递给函数(对于数组),这很容易,但是对于我需要的推送 innerElement.value 和其他 innerElement.key 所以希望我会有类似的东西:

  public values() {
    return getArrayInfo<T>(/*code to return value*/);
  }
  public keys() {
    return getArrayInfo<String>(/*code to return keys*/);
  }

 public getArrayInfo<I>(/*something*/) {
    let values = new Array<I>();
    this._keyMap.forEach((element) =>
      element.forEach((innerElement) => values.push(/*something*/))
    );
    return values;
  }

最佳答案

您所拥有的与某物非常接近。您可以使用属性索引签名。

public values() {
    return getArrayInfo<T>('value');
  }
  public keys() {
    return getArrayInfo<String>('key');
  }

 public getArrayInfo<I>(key: string) {
    let values = new Array<I>();
    this._keyMap.forEach((element) =>
      element.forEach((innerElement) => values.push(innerElement[key]))
    );
    return values;
  }

但是这样你会失去很多类型安全,你可能想在混合中添加一些未定义/空检查。

关于javascript - 在 Typescript 中创建(甚至更多泛型)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041964/

相关文章:

javascript - Angular:输入绑定(bind)不更新

javascript - 将数组列表转换为对象数组

javascript - 您可以更改 html 元素的样式属性的最大数量是多少?

javascript - Jquery 返回对象而不是选择器元素

javascript - 如何限制Fullcalendar禁用过去几天的所有操作?

typescript - angular2 从辅助选择元素中删除或禁用选择选项

java - Oracle Java 泛型教程

c# - 使用动态类型而不是不可能的通用属性

c# - LINQ 查询中的 List<T>.Contains(T) 出错

javascript - chrome 扩展中未定义 jquery