Typescript 中的 Node-ipc class
Node-ipc in Typescript class
我正在尝试在我的 TypeScript 项目中使用 node-ipc
,并坚持为 class 成员获取正确的类型:
import { IPC } from 'node-ipc';
class IpcImpl extends IIpc {
ipcSocketPath?: string;
ipc?: any; // What the type should be here?
setupIpc(ipcSocketPath: string) {
this.ipcSocketPath = ipcSocketPath;
this.ipc = new IPC(); // Here instantiated ok, but type mismatch ed
}
我当然安装了 @types/node-ipc
但它对我没有帮助。我试图指定以下内容(一切都不正确):
ipc?: IPC
ipc?: typeof IPC
如何指定我的 ipc
class 会员权限类型?
从 node-ipc 的 index.d.ts 内容中,您不能直接使用 NodeIPC
命名空间或 NodeIPC.IPC
class,因为它们未导出:
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();
}
}
我正在尝试在我的 TypeScript 项目中使用 node-ipc
,并坚持为 class 成员获取正确的类型:
import { IPC } from 'node-ipc';
class IpcImpl extends IIpc {
ipcSocketPath?: string;
ipc?: any; // What the type should be here?
setupIpc(ipcSocketPath: string) {
this.ipcSocketPath = ipcSocketPath;
this.ipc = new IPC(); // Here instantiated ok, but type mismatch ed
}
我当然安装了 @types/node-ipc
但它对我没有帮助。我试图指定以下内容(一切都不正确):
ipc?: IPC
ipc?: typeof IPC
如何指定我的 ipc
class 会员权限类型?
从 node-ipc 的 index.d.ts 内容中,您不能直接使用 NodeIPC
命名空间或 NodeIPC.IPC
class,因为它们未导出:
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();
}
}