跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Typescript 数组泛型问题
未分類
15 1 月 2021

Typescript 数组泛型问题

Typescript 数组泛型问题

資深大佬 : Xheldon 4

假设我有一个函数,参数是一个数组,如何重载函数来保证返回的值也是数组中的每个值的类型? 如:

A(['a', 1, [1]]) // 返回 ['aa', 11, [1, 1]](只是举个例子) 

我知道如果参数中的类型是同一种类型则比较好写,如:

function A<T>(arr: T[]): T[] {} 

或者

function A<T>(arr: Array<T>): Array<T> {} 

即可。但是没有想明白如果参数数组中的类型是任意的该如何写?

大佬有話說 (4)

  • 資深大佬 : wsxyeah

    function A(arr: [string, number, [number]]) {
    return [“a”, 1, [1]] as typeof arr
    }

    这样吗?

  • 資深大佬 : love

    declare function A<T extends any[]>(arr: readonly […T]): T

    let aaa = A([1, ‘2’, false])

  • 主 資深大佬 : Xheldon

    @wsxyeah 不只是三个,如果有 N 个参数呢

  • 主 資深大佬 : Xheldon

    @love 这样是可以的,但是又一个蛋疼的问题是我需要知道 T 数组中的每个类型,因为参数中需要用到该类型来指示。。。-_-!
    比如如果只有一个类型是这样的:

    “`js
    function A<T>(key: B<T>): T[] {}
    “`

    如果 T 是个数组,B 就拿不到 T 中的类型,然后就没法儿指示返回值数组中的每个类型了。搜了一圈,似乎 ts 在编译节点不可能拿到运行时才确定的参数类型,比较尴尬。用你写的方法需要有个类似 valueof 的关键字,来获取 T 数组中的每个元素类型,语法类似于:

    “`js
    function A<T extends any[]>(key: B<valueof T>): T[] {}
    “`

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具