打字稿混合类型

Typescript hybrid type

本文关键字:类型 混合      更新时间:2023-09-26

我目前正在为一个无法修改的私有JavaScript文件编写一个*d.ts文件。我目前正在尝试在接口中定义一个可以是字符串函数的属性:

var obj = {
    href: function(data) { return "/page/" + data.id; }
}

var obj = {
    href: "page/list.html"
}

在查看了有关接口的打字稿文档后,我遇到了以下示例,但它不允许我将函数定义为可选类型,如下所示:

interface IObj {
    href: {
        (...any)?: any;
        string? ;
    };
}

这可能吗?还是我以错误的方式接近这一点?

您真正要查找的是Union类型(用 | 表示)。对于您的情况:

interface IObj {
    href: string | { (...any): any };
};

var obj: IObj = {
    href: "page/list.html"
}
var obj: IObj = {
    href: function (data) { return "/page/" + data.id; }
}
// ERROR
var obj: IObj = { 
    href: 123
}

查看示例