打字稿混合类型

Typescript hybrid type

我目前正在为我无法修改的私有 JavaScript 文件编写一个 *d.ts 文件。我目前正在尝试在可以是 stringfunction:[=14= 的接口中定义 属性 ]

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

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

查看 typescript doc about interfaces I came across the follow example 但它不允许我将函数定义为可选类型,如下所示:

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
}

See an example