【发布时间】:2016-06-07 03:50:19
【问题描述】:
我正在使用 TypeScript 编写一个 extend 函数,它可以:
- 获取两个对象,在这种情况下,它会使用第二个对象的键/值更新第一个对象。
- 获取两个数组,在这种情况下,它将第二个的元素附加到第一个。
即
extend({a: 1}, {b: 2}) → {a: 1, b: 2}extend([1], [2]) → [1, 2]
这个函数应该接受两个数组或两个对象,而不是一个。
我正在尝试为它提出正确的类型签名。理想情况下是这样的:
function extend<A, B, StrOrNum extends (string|number)>(
a: {[key: StrOrNum]: A},
b: {[key: StrOrNum]: B}): {[key: StrOrNum]: A&B} {
..
}
tsc 抱怨,但是,索引签名必须是 string 或 number:
[ts] An index signature parameter type must be 'string' or 'number'.
(parameter) key: StrOrNum extends string | number
如果我正在编写类型定义文件,我只需定义函数的两个重载。我在实施时可以做类似的事情吗?还是这个函数只是不连贯——这是类型系统告诉我应该将其拆分为 extendObject 和 extendArray 函数的方式?
【问题讨论】:
标签: typescript