从 node-ipc 的 index.d.ts 内容中,您不能直接使用NodeIPC
命名空间或NodeIPC.IPC
类,因为它们没有被导出:
declare namespace NodeIPC {
class IPC {
// Some methods
}
// Some other classes
}
declare const RootIPC: NodeIPC.IPC & { IPC: new () => NodeIPC.IPC };
export = RootIPC;
但是,如果您使用的是 TypeScript 2.8+,您应该能够通过条件类型和在您的案例中使用的类型推断来推断类型:
type InferType<T> = T extends new () => infer U ? U : undefined;
所以你可以得到NodeIPC.IPC
类型:
import { IPC } from 'node-ipc';
type InferType<T> = T extends new () => infer U ? U : undefined;
class IpcImpl {
ipcSocketPath?: string;
ipc?: InferType<typeof IPC>;
setupIpc(ipcSocketPath: string) {
this.ipcSocketPath = ipcSocketPath;
this.ipc = new IPC();
}
}
您可以在 TypeScript 2.8 发行说明中找到有关条件类型和类型推断的一些有趣信息:
https ://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html
更新:
我刚刚发现 TypeScripts 的 2.8+ 包含预定义的条件类型,它的作用与我上面的代码InstanceType<T>
完全相同。InferType<T>
所以事实上,直接使用它,我们有一个更短的解决方案:
class IpcImpl {
ipcSocketPath?: string;
ipc?: InstanceType<typeof IPC>;
setupIpc(ipcSocketPath: string) {
this.ipcSocketPath = ipcSocketPath;
this.ipc = new IPC();
}
}