網站搜尋

typescript - 嗨,有沒有辦法讓元組自動推斷?


有沒有辦法讓自動推斷成一個元組?目前的推斷是 (string|boolean)[],問題在於我只想要在一種情況 (A) 下有包含 false 和 string 的陣列,而其他情況只想要 Boolean 值。如何使用自動推斷或其他方法達成,而不需要打整個物件,因為它有點長。

const inicialErrState: { [key: string]: boolean; a: [boolean, string] } = {
    a: [false, ''],
    b: false,
    c: false,
    d: false,
  }; 
  

答案#1

我的建議是使用一個輔助函數來推斷元組類型:

const tuple = <T extends any[]>(...t: T) => t;

const initialErrState = {
    a: tuple(false, ''),
    b: false,
    c: false,
    d: false,
};
/* const initialErrState: {
    a: [boolean, string];
    b: boolean;
    c: boolean;
    d: boolean;
} */

程式碼的 Playground 連結

答案#2

你可以使用以下類型。這將強制 a 為一個元組,但它允許其他所有值為布林值或元組,所以這不是一個完美的解決方案。不過,它可能對你的使用情況已經足夠有效。

type InitialErrorState = {
  [key: string]: [boolean, string] | boolean
} & {
  a: [boolean, string]
};