在 TypeScript 中递归展开数组类型

发布于 2025-01-11 11:39:08 字数 477 浏览 0 评论 0原文

我需要创建一个可以获取非常“动态”参数的函数。它应该能够接受多种类型的数组

class NdArray<T> {

}

// need to be able to get

f(number[]) // -> NdArray<number>
f(number[][]) // -> NdArray<number>
f(number[][][]) // -> NdArray<number>
//and so on...
f(string[]) // -> NdArray<string>
f(string[][]) // -> NdArray<string>
f(string[][][]) // -> NdArray<string>
// and generally
f(object[][][]...) // -> NdArray<object>

I need to create a function that can get a very "dynamic" parameter. it should be a ble to accept many types of arrays

class NdArray<T> {

}

// need to be able to get

f(number[]) // -> NdArray<number>
f(number[][]) // -> NdArray<number>
f(number[][][]) // -> NdArray<number>
//and so on...
f(string[]) // -> NdArray<string>
f(string[][]) // -> NdArray<string>
f(string[][][]) // -> NdArray<string>
// and generally
f(object[][][]...) // -> NdArray<object>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画尸师 2025-01-18 11:39:08

递归地解开数组:

type UnwrapArray<A> = A extends unknown[] ? UnwrapArray<A[number]> : A;

如果 A 是一个数组,我们就解开其元素的类型。否则,这只是我们不需要打开的其他东西。

您的函数 f 可能类似于:

function f<T>(type: T): NdArray<UnwrapArray<T>> {
    // a very cool implementation
}

游乐场

Recursively unwrap the array:

type UnwrapArray<A> = A extends unknown[] ? UnwrapArray<A[number]> : A;

If A is an array, we unwrap the type of its elements. Otherwise it's just something else we don't need to unwrap.

Your function f here could be something like:

function f<T>(type: T): NdArray<UnwrapArray<T>> {
    // a very cool implementation
}

Playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文