Из содержимого index.d.ts узла-ipc нельзя напрямую использовать класс имен 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
Обновление:
Я только что обнаружил, что в 2.8+ TypeScripts входит предопределенный условный тип InstanceType<T>
, который делает то же самое, что и InferType<T>
из моего кода выше.Так что на самом деле, используйте его напрямую, и у нас есть еще более короткое решение:
class IpcImpl {
ipcSocketPath?: string;
ipc?: InstanceType<typeof IPC>;
setupIpc(ipcSocketPath: string) {
this.ipcSocketPath = ipcSocketPath;
this.ipc = new IPC();
}
}