我似乎已经迷上了这个。我正在尝试创建两个函数的联合类型别名。编译器可以看到函数的所有参数的类型,而其中的参数要少得多。
interface Function1 {
(param1: boolean, param2: number, param3: string): void;
}
interface Function2 {
(param0: any, param1: boolean, param2: number, param3: string): void;
}
type FunctionUnion = Function1 | Function2;
const function1implemenattion: FunctionUnion = (param1, param2, param3) => {
// param1 is any
// param2 is any
// param3 is any
}
const function2implementation: FunctionUnion = (param0, param1, param2, param3) => {
// param0 is any
// param1 is boolean
// param2 is number
// param3 is string
}
我宁愿不执行以下操作:
const function1implemenattion: FunctionUnion = (param1: boolean, param2: number, param3: string) => {
因为那样会抵消我对接口的使用,并使将来更改类型变得更加困难。
如果可以的话,如何在不牺牲方便性或可读性的情况下完成此任务?我想避免这样的签名:
type FunctionUnion = (param0: any, param1: number | boolean, param2: number | string, param3?: string) => void
感谢您抽出宝贵的时间阅读并帮助解决我的问题!
答案 0 :(得分:0)
您无法完成此操作。但是,您可以像这样创建重载函数。
interface YourFunction {
(param1: boolean, param2: number, param3: string): void;
(param0: any, param1: boolean, param2: number, param3: string): void;
}
const func: YourFunction = (p0, p1, p2, p3) => {}
虽然我以前认为重载函数不能解决我的问题,但这正是我想要的。
答案 1 :(得分:0)
您可以使用类型。 像这样:
type Params = {
parameter1: string | number,
parameter2: string;
}
function test(...parameters: Params[]) {
const var1= parameters[0].parameter1
const var2 = parameters[0].parameter2
// also you can see length of array size with parameters.length code
}