作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 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/
我是一名优秀的程序员,十分优秀!