我试图实现一个简单的事情(IMO),但似乎我没有足够的经验与Typescript。
我想定义一个传递以下表达式的类型:
const dp: DataPoint = [1, 2];
const dp2: DataPoint = [1, 2, 3];
const dps: DataPoints = [[1, 2], [2, 3]];
const dps2: DataPoints = [[1, 2, 3], [2, 3, 4]];
我这样做了:
export type DataPoint<T = number, D = number> = [number, T, D?];
export type DataPoints<T = number, D = number> = DataPoint<T, D>[];
并尝试了许多其他方法,但最终所有这些方法的结果类型都包含两个泛型:DataPoint<number, number>
或DataPoints<number, number>
。有没有办法从dp
的例子中推断出never
,并有DataPoint<number>
而不是<DataPoint<number, number>
?
也许你可以使用元组来使事情更简单:
type DataPoint =
| [number, number]
| [number, number, number]
| [[number, number], [number, number]]
| [[number, number, number], [number, number, number]];
const dp: DataPoint = [1, 2];
const dp2: DataPoint = [1, 2, 3];
const dps: DataPoint = [[1, 2], [2, 3]];
const dps2: DataPoint = [[1, 2, 3], [2, 3, 4]];
或者如果你想让它更灵活一点,使用数组:
type DataPoint =
| [number, number]
| [number, number, number]
| Array<[number, number]>
| Array<[number, number, number]>