从打字稿调用 alertifyjs

call alertifyjs from typescripts

我正在尝试将一些 js 代码迁移到打字稿。 具体来说,我在使用 AlertifyJs 时遇到了麻烦。现在Alertify好像很多东西。

  1. a discontinued project 来自 fabien-d
  2. 拿起并继续 alertifyjs 点组织
  3. 由 MohammadYounes alertifyjs.com 挑选

现在我可以在 DefinitelyTyped 上找到 (1) 的 d.ts,但其他的 none。 我想使用 (3)!

我想以某种方式包装或直接调用 alertify.confirm("you go", "girl"); from ts.

我该如何实现?

谢谢

PS: 在 vs2015 中编码

编辑: 以为我会为你们这些漂亮的书呆子提供一段我得到的代码片段

///<reference path="../typings/jquery/jquery.d.ts"/>
///<reference path="../typings/toastr/toastr.d.ts"/>

module mymodule.Web {
export class CommonTools {

    constructor() {
        toastr.options.closeButton = false;
    }

    showInfo(title: string, message: string) {
        toastr.info(message, title);
    }
    showConfirm(title: string, message: string) {
     //**code goes here**
    }
}
}

最简单(也是最不安全或最不优雅)的解决方案可能是将其添加到打字稿的全局范围内的某处。

declare var alertify: any;

像这样,打字稿会知道 alertify 变量。

如果你更精确,你可以引入你自己的(例如)AlertifyJSStatic接口与你想使用的那些方法,并将其作为 alertify 变量的类型。

interface AlertifyJSStatic {
  confirm(a: string, b:string);
}

declare var alertify: AlertifyJSStatic;

有时快速添加自己的需求比迷失在 d.ts 库(和版本)中更容易。

*我看到有一个可接受的答案,但这是我的解决方案。

对于我的 angular 项目,在使用 npm 安装后,在 TS 文件的导入部分中,复制以下内容...

import * as alertifyJs from 'alertifyjs';

从那里开始,用法就如您所愿。

alertifyJs.confirm('alertify is working');

希望这对您有所帮助。干杯

如果你有库的全局安装,像这样声明它

declare global {
  interface Window {
    alertify: {
      success: Function;
      [key: string]: Function; // for all others
    };
  }
}

现在安全使用

window.alertify.success(...)

根据 Zoltán Tamási 的回答,我创建了一个界面,帮助我解决了 TypeScript 中的编译错误:

// globals/alertify.type.js

interface AlertifyJsStatic {
    alert (title: any, message: any, onok?: string);
    confirm (title: any, message: any, onok?: any, oncancel?: any);
    prompt (title: any, message: any, value?: string, onok?: any, oncancel?: any);
    notify (message: string, type?: string, wait?: number, callback?: any);
}

declare var alertify: AlertifyJsStatic;

我通过 Triple-Slash directive

在任何地方引用它
/// <reference path="globals/alertify.type.ts" />