簡體   English   中英

打字稿將不同泛型類型的數組合並為相同的泛型類型

[英]Typescript merge array of different generic types into the same generic type

我有以下類型的數組:

myList = [
 listOfString: Parser<string[], string, any>
 stringThing: Parser<string, string, any>
]

和 typesript 標記 myList 類型(Parser<string[], string, any> | Parser<string, string, any>)[]

有沒有辦法將其轉換為Parser<string | string[], string, any> Parser<string | string[], string, any>默認情況下?

或者,當把它傳遞給一個看起來像的函數時

myFunc<T>(list: Parser<T>[]): Parser<T>

有沒有辦法允許這種類型的數組並使其myFunc返回Parser<string | string[], string, any> Parser<string | string[], string, any> ?

有沒有辦法將其轉換為Parser<string | string[], string, any> Parser<string | string[], string, any> [...]?

T<string> | T<string[]> T<string> | T<string[]>T<string | string[]> T<string | string[]>在一般情況下不是等效類型。

舉個例子

type T<U> = (u: U) => U;

現在T<string> | T<string[]> T<string> | T<string[]>要么是一個接受字符串的函數,要么是一個接受字符串數組的函數。 在任何一種情況下,函數的參數都只是這兩種類型中的一種,並且您只能使用該類型的參數調用它。 如果你(可以)用字符串調用它,你就不能用字符串數組調用它,它也必須返回一個字符串。

另一方面, T<string | string[]> T<string | string[]>描述了一個函數,其參數是一個字符串或一個字符串數組,這意味着對於每次調用,您都可以選擇傳遞哪個。 您也可以使用字符串調用它,但該函數返回一個字符串數組。

舉一個具體的例子, (u: string) => u將滿足第一種類型,但不能分配給第二種:

// OK
const test1: T<string> | T<string[]> = (u: string) => u;

// Error
const test2: T<string | string[]> = (u: string) => u;

同樣, (u: string | string[]) => u有相反的效果:

// Error
const test3: T<string> | T<string[]> = (u: string | string[]) => u;

// OK
const test4: T<string | string[]> = (u: string | string[]) => u;

暫無
暫無

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

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