打字稿混合型

时间:2015-02-04 00:50:02

标签: javascript typescript

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

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

OR

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

在查看typescript doc关于接口的follow example后,我不会让我将该函数定义为可选类型,如下所示:

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

这甚至可能吗?或者我是以错误的方式接近这个?

1 个答案:

答案 0 :(得分:3)

您真正需要的是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