TypeScript参数类型是如何工作的
让我们来看看TypeScript参数工具类型是如何工作的。
TypeScriptParameters 类型用于获取函数的参数或参数,并根据它们创建一个新的类型。当我们知道一个Function 的输入符合某种类型,而我们想复制这种类型时,它是相当有用的。在本指南中,让我们看看Parameters 实用类型是如何工作的。
TypeScript 自定义类型
本指南涵盖了自定义类型。如果你是自定义类型的新手,请阅读我关于自定义类型的指南,这里。
参数类型如何工作
想象一下,你有一个函数,有一组参数的数量。例如,这里是一个TypeScript函数,有两个参数或参数,a ,和b 。
TypeScript
const myFunction = (a: string, b: string) => {
return a + b;
}
假设我们想运行这个函数。一种方法是传入一个带有元组类型的数组的三点运算符。比如说
TypeScript
const myFunction = (a: string, b: string) => {
return a + b;
}
let passArray:[string, string] = [ 'hello ', 'world' ]
// Returns 'hello world'
myFunction(...passArray);
这里我们定义了一个元组,简单来说就是[string, string] ,我们可以把它传入myFunction,同时满足a 和b 的参数。
这样做很好,但是如果myFunction 的参数改变了呢?如果myFunction 是来自第三方的脚本,这种情况就更容易发生。那么我们不仅要更新我们的函数,还要记得更新我们传入的元组类型。我们还需要跟上myFunction 中的软件包,以防它发生变化。
相反,如果我们想确保它们总是匹配,我们可以使用Parameters 来产生相同的类型。这将创建一个参数的元组类型,而不是我们必须手动定义它。
TypeScript
type myType = Parameters<typeof myFunction>
// Equivalent to a tuple type of:
// type myType = [ a: string, b: string ]
这为我们在定义自定义类型时节省了一些麻烦,因为我们现在可以将任何类型的myType 传递到myFunction ,而不用担心出错。
TypeScript
const myFunction = (a: string, b: string) => {
return a + b;
}
type myType = Parameters<typeof myFunction>
let myArray:myType = [ 'hello ', 'world' ];
myFunction(...myArray)
使用参数实用类型对特定参数进行建模
参数类型也是相当灵活的,它允许我们定义更多的参数,而不仅仅是完整的参数集。例如,如果我们想在我们的函数myFunction 中只匹配第一个参数的类型,我们可以通过添加[0] ,像一个简单的数组一样引用它。下面将匹配a 的类型,但如果我们想匹配b 的类型,我们可以使用[1] 。
TypeScript
type myType = Parameters<typeof myFunction>[0]
// Equivalent of 'string'
这样,如果我们在代码中需要,我们可以为每个参数定义自定义类型。例如,这里我们为函数的第一个和第二个参数定义了两个自定义类型,并将它们都传入我们的函数。
TypeScript
const myFunction = (a: string, b: string) => {
return a + b;
}
type aType = Parameters<typeof myFunction>[0]
type bType = Parameters<typeof myFunction>[1]
let a:aType = 'hello '
let b:bType = 'world'
myFunction(a, b)
关于参数的更多乐趣
由于Parameters ,将参数的类型转换为新的类型,我们也可以将一个函数直接传入。下面将产生一个类型[ a: string, b: number ] 。这比从一个特定的函数中获取参数不那么有用,但在某些情况下可以达到目的。
TypeScript
type anotherType = Parameters<(a: string, b: number) => void>
TypeScript 数据类型
经Johnny Simpson, DZone MVB许可发表于DZone。点击这里查看原文。
DZone贡献者所表达的观点是他们自己的。