【发布时间】:2020-01-17 06:55:49
【问题描述】:
我正在尝试强制 number[] 类型的参数包含至少一个值为 9 的元素。
到目前为止,我得到了:
type MyType<Required> = { 0: Required } | { 1: Required } | { 2: Required };
declare function forceInArray<
Required extends number,
Type extends number[] & MyType<Required>
>(
required: Required,
input: Type
): void;
// should fail type-checking
forceInArray(9, []);
forceInArray(9, [1, 2]);
forceInArray(9, { 0: 9 });
// should type-check correctly
forceInArray(9, [9]);
forceInArray(9, [9, 9]);
forceInArray(9, [9, 2, 3, 4]);
forceInArray(9, [1, 9, 3, 4]);
forceInArray(9, [1, 2, 9, 4]);
forceInArray(9, [1, 2, 3, 9]);
但是 MyType 类型不会包含所有可能的索引,所以我试图以其他方式编写它。 { [index: number]: 9} 不是这样做的好方法,因为它需要将 all 值设置为 9。我也尝试了一些映射类型的组合,但没有成功
如何写MyType 来解决这个问题?
【问题讨论】:
标签: arrays typescript generics types typescript-generics