簡體   English   中英

Typescript 字符串字面量 通用類型 function

[英]Typescript String Literal Type in generic function

我有一個帶有一個通用參數的 function,但有兩個 function 參數。 當我使用“字符串文字類型”時,兩個 function 參數可以有不同的值:

function func2<T extends 'A' | 'B'>(x: T, y: T): void { }

func2('A', 'A'); // OK
func2('A', 'B'); // OK, why?
func2('A', 'C'); // ERR

但我需要xy相同,就像 Classes 的示例一樣:

class A {  public a;}
class B {  public b;}
class C {  public c;}

function func1<T extends A | B>(x: T, y: T): void { }

func1(new A(), new A()); // OK
func1(new A(), new B()); // ERR
func1(new A(), new C()); // ERR

有什么方法可以使xy與“字符串文字類型”具有相同的值?

Aluan Haddad 的評論解決了這個問題:

參數都匹配約束,並且順序無關緊要,因此會進行適當的推斷,但是您可以編寫 func2(x: T, y: U)。 這使得第二個約束取決於第一個

現在兩個參數只能具有相同的值:

function func2<T extends 'A' | 'B', U extends T>(x: T, y: U): void { }

func2('A', 'A'); // OK
func2('A', 'B'); // ERR
func2('A', 'C'); // ERR

暫無
暫無

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

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