export default {} // 参数个数 // 注意点: 可少不可多 // let func1 = (a: number, b: string) => {} // let func2 = (x: number) => {} // func1 = func2; // func2 = func1; // 参数类型 // 注意点: 参数类型必须相同 // let func1 = (x: number) => {} // let func2 = (x: number) => {} // let func3 = (x: string) => {} // func1 = func2; // func2 = func1; // func1 = func3; // func3 = func1; // 返回值类型 // 注意点: 返回值类型必须相同 // let func1 = (): number => 18; // let func2 = (): number => 28; // let func3 = (): string => "返回值类型的兼容性"; // func1 = func2; // func2 = func1; // func1 = func3; // func3 = func1; // 函数双向协变 // 1.参数的双向协变 // 注意点: 可以多的赋值给少的 // let func1 = (x: number) => {} // let func2 = (x: (number | string)) => {} // func1 = func2 // func2 = func1 // 2.返回值的双向协变 // 注意点: 不能将返回值是联合类型的赋值给具体的;可以将返回值是具体类型的赋值给联合类型的 // let func1 = (x: boolean):(number | string) => x ? 18: "张含韵"; // let func2 = (x: boolean): boolean => true; // func1 = func2; // func2 = func1; // 函数重载 // 注意点: 不能将重载少的赋值给重载多的, 可以将重载多的赋值给重载少的 // function add(x: number, y: number): number; // function add(s: string, y: string): string; // function add(x: any, y: any): any { // return x+y; // } // function sub(x: number, y: number): number; // function sub(x: any, y: any) { // return x - y; // } // let fn = add; // fn = sub; // let fn = sub; // fn = sub; // 可选参数及剩余参数 // 当一个函数有剩余参数的时候,它被当做无限个可选参数 function func(args: any[], callback: (...args: any[]) => void) { } func([1, 2], (x, y,z)=> console.log(x+ y+ z)) func([1, 2], (x?, y?)=> console.log(x+ y)) func([1, 2], (x, y?, z?)=> console.log(x+ y+z))