gpt4 book ai didi

typescript - 一起使用 Typescript 可变元组类型和 Javascript Spread

转载 作者:行者123 更新时间:2023-12-05 04:29:03 32 4
gpt4 key购买 nike

需要帮助理解下面这段代码的工作原理。

function concatFun<T extends any[], U extends any[]>(
arg1: T[],
arg2: U[]
): [...T, ...U] {
const newArr = [...arg1, ...arg2]; // (T | U)[]
return newArr; // error Type '(T | U)[]' is not assignable to type '[...T, ...U]'.
// Target requires 2 element(s) but source may have fewer.
}

我希望返回类型是 [...T, ...U],但返回类型是 (T | U)[]

最佳答案

固定您需要推断提供的参数的文字类型

type Json =
| null
| string
| number
| boolean
| Array<JSON>
| {
[prop: string]: Json
}

function concatFun<
Fst extends Json, T extends Fst[],
Scd extends Json, U extends Scd[]>(
arg1: [...T],
arg2: [...U]
): [...T, ...U] {
return [...arg1, ...arg2]

}

concatFun([1, 2, 3], [4, 5, 6]) // [1, 2, 3, 4, 5, 6]

Playground

更新

function concatFun<
Fst extends Json, T extends Fst[],
Scd extends Json, U extends Scd[]>(
arg1: [...T],
arg2: [...U]
) {
const foo: [...T, ...U] = [...arg1, ...arg2]
return foo
}
}

您可以帮助 TS 推断串联数组。老实说,我不确定 TS 如何解决它。但是,如果您从 foo

中删除显式类型 [...T, ...U],则错误消息非常直观

关于typescript - 一起使用 Typescript 可变元组类型和 Javascript Spread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72445452/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com