簡體   English   中英

如何接受泛型元組作為參數並返回包含泛型類型的泛型

[英]how to accept a generic tuple as a parameter and return a genaric containing the generic types

所以現在打字稿 4 出來了,我希望這會更容易,但我仍然沒有找到實現這一點的方法。

我正在嘗試創建一個函數,該函數接收包含特定泛型的元組並返回包含值的泛型返回。

interface STORE<T> {
  data: T;
}

const merge = <U extends any, T extends readonly STORE<U>[]>(values: T): STORE<U[]> =>
  values.reduce<STORE<U[]>>(
    (acc, item) => {
      return { data: [...acc.data, item.data] };
    },
    { data: [] },
  );

例如調用它應該導致以下結果

assert(merge([{ data: 'test' }, { data: 2 }]), { data: ['test', 2]});

然而,這將返回值作為STORE<unknown[]>而不是維護輸入的類型。

看看為什么 typescript 函數參數類型推斷失敗?

通過使用T & (constraint of T)可以解決您的問題:

const merge = <U extends any, T extends readonly STORE<U>[]>(
  values: T & readonly STORE<U>[],
         // ^ here to ---- here ^
): STORE<U[]> => values.reduce<STORE<U[]>>((acc, item) => {
    return {data: [...acc.data, item.data]};  
  }, {data: []})


interface STORE<T> {
  data: T;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM