我在我的应用程序(而不是Twilio Node)上使用Twilio.js库,并且此库没有可用的模块或类型。只有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
关键字,它仍然有效。我还应该离开吗?它做了什么?鉴于使用Twilio.Device.ready(this.handleTwilioDeviceReady.bind(this));
,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
如何摆脱在IDE中显示的Twilio.Base
,而不是显示:
Twilio
:const Twilio: Twilio
Twilio.Device
:(property) Twilio.Device: Twilio.Device
答案 0 :(得分:1)
我已经看了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文件并且需要声明哪些类和接口可以公开访问时,它才是必需的。
编辑:Device.Ready的回调类型
IDevice
具有ready
方法,该方法接受传递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;
...
}