【问题标题】:Typescript hybrid type打字稿混合类型
【发布时间】:2015-02-04 00:50:02
【问题描述】:

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

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

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

查看typescript doc关于接口后,我遇到了follow example,但它不允许我将函数定义为可选类型,如下所示:

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

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

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助。请其他人注意,在阅读之后我发现 Unions 不在 Typescript 1.4 以下的版本中。
    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 2019-06-24
    • 2019-07-26
    • 1970-01-01
    • 2017-05-18
    • 2016-12-08
    • 2018-09-15
    • 2021-08-05
    相关资源
    最近更新 更多