gpt4 book ai didi

typescript - 如何在 TypeScript 中为 Twilio 全局 JS 库创建环境声明?

转载 作者:行者123 更新时间:2023-12-04 16:55:49 24 4
gpt4 key购买 nike

我正在使用 Twilio.js我的应用程序(不是 Twilio Node)上的库,并且这个库没有可用的模块或类型。只有一个 Twilio可以使用的全局变量可用。

为了避免 IDE 中的错误,最简单的环境声明是这样的:

declare const Twilio: any;

但我想更进一步,为此我一直在阅读 TypeScript 手册和其他一些资源。我特别关注 this link .

这是我到目前为止所拥有的:
declare const Twilio: Twilio.Base;

declare namespace Twilio {

export interface Base {
Device: Device;
}

export interface Device {
ready(handler: DeviceCallback): void;
}

export interface DeviceCallback {
(device: Device): void;
}

}

这是有效的,但它只是一个示例,并不完整。举个例子,现在就足够了:)

但我的问题是三重的:
  • 鉴于上面的简短示例,您会做一些不同的事情吗?
  • 如果我删除 export来自所有接口(interface)的关键字,它仍然有效。我还应该离开它吗?它有什么作用?
  • 鉴于用法 Twilio.Device.ready(this.handleTwilioDeviceReady.bind(this)); , 将鼠标悬停在 IDE 上时,IDE 会给我以下信息:
  • Twilio :const Twilio: Twilio.Base
  • Twilio.Device :(property) Twilio.Base.Device: Twilio.Device
  • Twilio.Device.ready :(method) Twilio.Device.ready(handler: Twilio.DeviceCallback): void
  • 我怎样才能摆脱Twilio.Base出现在 IDE 中,而是显示:
  • Twilio :const Twilio: Twilio
  • Twilio.Device :(property) Twilio.Device: Twilio.Device
  • 最佳答案

    我已经查看了 API,我认为下面的内容应该是作为环境声明文件的一个很好的起点。

    declare namespace Twilio {

    class Connection {
    // Constructor does not appear to be available to user.
    private constructor();
    // Add Connection Methods and Properties Here
    }

    // Not immediately clear if Twilio.Device is a class or not.
    interface IDevice {
    setup(token, options);
    ready(handler);
    offline(handler);
    incoming(handler);
    connect(params) : Connection;
    // Add Remainder of Twilio.Device properties here.
    }

    /**
    * Twilio.Device appears to be a singleton object that
    * you don't instantiate yourself. You can use
    * the below to declare its presence.
    */
    let Device : IDevice;
    }

    还有一些注意事项:
    declare const Twilio: Twilio.Base;

    下面的命名空间声明使这一点变得多余,它的作用是使用您声明的名称和成员声明一个普通的旧 JS 对象的存在。

    在声明环境类/命名空间时,导出似乎没有任何功能。仅当您声明具有默认导出成员的模块时才需要,或者如果您正在编写 TS 文件并且需要声明哪些类和接口(interface)将可公开访问。

    编辑:Device.Ready 的回调类型
    IDeviceready方法,它接受一个传递了 IDevice 的函数参数。对象,并且预计不会返回任何内容。这种函数的类型签名是:
    (device : IDevice) => void;

    内联声明将是:
    ready((device : IDevice) => void) : void;

    鉴于您要多次重用此回调类型,您应该创建一个 type alias然后像这样引用它:
    type DeviceCallback = (device : IDevice) => void;

    interface IDevice {
    ...
    ready(handler: DeviceCallback) : void;
    offline(handler : DeviceCallback) : void;
    ...
    }

    关于typescript - 如何在 TypeScript 中为 Twilio 全局 JS 库创建环境声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42317942/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com