从元组评估函数的参数类型

Assessing a Function's Argument Types From Tuple

我正在尝试使用元组类型作为函数参数的类型。

type T_a = (a1: string, a2: number) => boolean
const a: T_a = (a1, a2) => a1.length >= a2

type T_b_arguments = [number, string]
type T_b = (...T_b_arguments) => boolean
const b: T_b = (b1, b2) => b1 < b2.length

// Example:
b(1, 'mystring) // true

Typescript playground

我该怎么做?

函数的形式参数定义为 parameter_name 后跟一个可选的类型注释。即namename: type annotation

如果未指定类型注释且可以推断出 none,则参数的类型将为 any

在剩余参数的情况下,写成 ...parameter,如果没有指定类型注释并且可以推断 none,...parameter 将具有类型 any[]

因此,在

type T_b = (...T_b_arguments) => boolean

T_b_arguments 不是指类型,而是类型 any[]

的剩余参数的名称

要更正此问题,您必须命名参数并应用类型注释,T_b_arguments

type T_b = (...args: T_b_arguments) => boolean

请注意,... 语法不适用于参数类型,而是应用于参数名称。

这是完整的工作代码

type T_a = (a1: string, a2: number) => boolean
const a: T_a = (a1, a2) => a1.length >= a2

type T_b_arguments = [number, string]
type T_b = (...args: T_b_arguments) => boolean
const b: T_b = (b1, b2) => b1 < b2.length

b(1, 'mystring') // true

Playground Link