声明模块和导入定义

时间:2019-07-13 11:12:15

标签: typescript typescript-typings

我为接口编写了TypeScript类型,该接口可以由其他多个npm软件包(即Noble bindings)实现。

文件很长

import { EventEmitter } from "events";
import StrictEventEmitter from "strict-event-emitter-types";

export type PeripheralUuid = string;
export type Address = string;
export type AddressType = "public" | "random" | "unknown";
export type Descriptor = string;

export interface Advertisement {
  localName: string;
  txPowerLevel: number;
  serviceUuids: BluetoothServiceUUID[];
  manufacturerData?: Buffer;
  serviceData?: Buffer;
}

export interface Methods {
  init(): void;
  startScanning(
    serviceUuids: BluetoothServiceUUID[],
    allowDuplicates: boolean
  ): void;

// ...

您可以在这里https://github.com/LukasBombach/sblendid/blob/master/packages/sblendid/types/bindings.d.ts

查看全部内容

我无法控制此文件的实现,但是我知道它们必须符合这些类型。我正在导入这些文件,并试图告诉打字稿,当我导入任何这些实现​​时,例如

import BindingsMacOs from "noble-bindings-macos";
import BindingsWindows from "noble-bindings-windows";
import BindingsLinux from "noble-bindings-linux";

因为我只是这样做,否则会收到错误或警告

现在我想我可以一次将我的类型定义为bindings.d.ts并编写导入这些绑定的模块声明:

import Bindings from "./bindings"

declare module "noble-bindings-macos" {
  export default Bindings;
}

但是我错了:

  

扩充中无效的模块名称。模块'noble-bindings-macos'解析为'/Users/lbombach/Projekte/DecentEspresso/sblendid/packages/noble-bindings-macos/index.js'中的无类型模块,该模块无法进行扩充。 ts(2665)

如果我删除了import语句并仅导出了某些内容,则效果很好。

有什么方法可以导入这些声明,并将其重新用于多个模块声明?

0 个答案:

没有答案