网站搜索

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]
};