You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:55:10