给定以下类型:
type Add = (x:number, y:number) => number
我可以声明该类型的
const
并定义函数的其余部分,而无需显式指定类型。 Typescript 知道 x
是一个数字,y
是一个数字。
const add: Add = (x, y) => x + y;
我更喜欢使用
function
而不是 const
来定义函数,但是似乎没有办法输入完整的函数声明。看来您被迫单独定义参数和返回类型。有没有办法在下面的声明中使用 Add
类型,这样我就不必指定 x
是一个数字,y
是一个数字
function add(x, y) {
return x + y;
}
无需被迫做类似的事情
function add(x: Parameters<Add>[0], y: Parameters<Add>[1]): ReturnType<Add> {
return x + y;
}
您不能为函数声明指定类型。您只能使用
Parameters
和 ReturnType
。唯一的小改进是对参数使用解构:
type Add = (x:number, y:number) => number
function add(...[x, y]: Parameters<Add>): ReturnType<Add> {
return x + y;
}
您可以指定函数表达式的类型,但不能指定函数声明的类型。
// index.d.ts
export function add(a: string, b: string): string;
export function add(a: number, b: number): number;
// index.js
/**
* @typedef {import('./index.d.ts').add} AddFunction
*/
/**
* @type AddFunction
* @param {any} a
* @param {any} b
*/
export const add = function(a, b) {
return a + b;
}
add(1, 2);
add('a', 'b');
add(1, '2')
❯ ./node_modules/.bin/tsc
index.js:16:1 - error TS2769: No overload matches this call.
Overload 1 of 2, '(a: string, b: string): string', gave the following error.
Argument of type 'number' is not assignable to parameter of type 'string'.
Overload 2 of 2, '(a: number, b: number): number', gave the following error.
Argument of type 'string' is not assignable to parameter of type 'number'.
16 add(1, '2');
~~~~~~~~~~~
Found 1 error in index.js:16
对于函数表达式:
export type Add = (x: number, y: number) => number
export const add: Add = function add (x, y) {
return x + y;
}
对于函数声明:
export function add (x: number, y: number): number
export function add (x: any, y: any) {
return x + y;
}