修改Typescript中的数组类型

时间:2019-12-19 20:18:48

标签: typescript

假设您有一个返回以下内容的函数:

const useHook0 = (props) => {
    ...
    API call
    ...
    return [varA, varB, varC] as [boolean, boolean, any]
}

然后您希望在另一个函数中使用它,例如:

const [itemA, itemB, itemC]: [boolean, boolean, number] = useHook0(configA);
const [itemA1, itemB1, itemC1]: [boolean, boolean, string] = useHook0(configB);

有没有一种方法可以将类型应用于原始数组(例如以接口的形式),这样您只需指出第三个常量将是哪种类型?

换句话说,我觉得编写: [boolean, boolean, number]: [boolean, boolean, string]是多余和不必要的,但是我找不到更简洁的方法。

编辑:

以这种方式构造它的原因是function0是一个进行API调用的钩子。因此数据可以采用许多不同的形式。

之所以没有以对象的形式提供它,是因为如果我在一个函数中进行了多个API调用,则需要能够重命名常量。

编辑2:

每次避免断言的目的是使它itemA.map(result => ...)被调用5次时,我不需要每次都写itemA.map((result: string) => ...)。只是尝试遵循DRY。

1 个答案:

答案 0 :(得分:2)

如果您知道应该返回的不同配置,可以使用Generics来解决此问题:

const useHook0 = <T>(props): [boolean, boolean, T] => {...}
const [itemA1, itemB1, itemC1] = useHook0<number>(configA)
const [itemA1, itemB1, itemC1] = useHook0<string>(configB)