【问题标题】:How can I declare window.Promise when I have proper Promise declaration?当我有正确的 Promise 声明时,如何声明 window.Promise?
【发布时间】:2014-07-02 15:13:58
【问题描述】:

我已经从DefinitelyTyped 下载了 TypeScript 的 Promise 类型声明,现在我正确地拥有了 Promise 的声明。现在我必须访问 window.Promise 以检查浏览器对 Promise 的支持。我不能这样做,因为这里没有声明 window.Promise 属性,而 Promise 是。因此,我尝试自己声明:

interface Window {
    Promise: typeof Promise;
}

现在,有一个问题。 typeof Promise 中的“Promise”实际上是指 Window.Promise,而不是 Promise 声明,所以现在 Promise 的类型是 ,这是我不想要的。

如何在此处正确声明 window.Promise?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我不能这样做,因为这里没有声明 window.Promise 属性,而 Promise 是

    您可以使用以下命令在window 上检查Promise

    if(window['Promise'] === undefined){
        // no support
    }
    

    typeof Promise 中的“Promise”实际上是指Window.Promise,而不是Promise 声明

    您需要从本地范围访问全局范围定义。并且 TypeScript 进入本地范围,您可能正在寻找这样的东西(注意临时变量 foo):

    declare module Promise{export var mem:number;}
    
    var foo:typeof Promise;
    interface Window {
        Promise: typeof foo;
    }
    
    window.Promise.mem = 123; // okay 
    

    【讨论】:

    • 如果我们有 Promise 定义,TS 自动定义 window.Promise 会更开心。包括window.setImmediate在内的一些函数是全局定义的,但在Window接口中没有定义,它是全局的。无论如何,我现在应该听从你的建议。谢谢你:)
    • @KagamiSaschaRosylight 更新是否为您解决了问题? ...见:github.com/borisyankov/DefinitelyTyped/blob/master/es6-promises/…
    • 太好了,效果很好!但是,foo 的类型应该是 typeof Promise,因为 TS 需要泛型类型中的类型参数(DefinitelyTyped 类型定义将 Promise 声明为泛型类型),而简单的 Promise 在这里不起作用。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2019-03-21
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多