TypeScript多签名函数类型能否实例化?请给出示例
可以实例化,以下是实现示例
你定义的MyFunction是带额外属性的重载函数类型,它要求实例既是一个支持两种调用签名(单参数/双参数,返回布尔值)的函数,同时拥有desc字符串属性。下面是几种可行的实例化方式:
方法一:先实现函数,再添加属性
type MyFunction = { (x:any):boolean; (x:any, y:any):boolean; desc:string; } // 用可选参数兼容两种重载签名 function myFunc(x: any, y?: any): boolean { // 示例逻辑:校验输入是否为有效真值 return typeof x !== 'undefined' && (typeof y === 'undefined' || Boolean(y)); } // 添加类型要求的desc属性 myFunc.desc = "支持1个或2个参数的布尔校验函数"; // 标注类型(也可省略,TypeScript会自动推断) const funcInstance: MyFunction = myFunc;
方法二:用Object.assign直接合并函数与属性
type MyFunction = { (x:any):boolean; (x:any, y:any):boolean; desc:string; } const funcInstance: MyFunction = Object.assign( // 匿名函数兼容两种签名 (x: any, y?: any): boolean => Boolean(x) && (y === undefined || Boolean(y)), { desc: "双签名布尔判断函数" } );
方法三:类型断言配合属性赋值
type MyFunction = { (x:any):boolean; (x:any, y:any):boolean; desc:string; } // 先创建函数,断言为目标类型后添加属性 const funcInstance = ((x: any, y?: any): boolean => Boolean(x && y ?? true)) as MyFunction; funcInstance.desc = "重载函数实例";
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

