我正在用TS建造一个图书馆.该库使用ssh2
库作为依赖项.
我正在try 创建一个函数,该函数既可以接受ssh2
配置对象,也可以接受现有的Client
实例来执行命令(这是一个简化的情况):
import { Client, ConnectConfig } from 'ssh2';
export function runCommand(params: Client | ConnectConfig) {
if(params instanceof Client) {
// do something
} else {
// create our own client
// do something
}
}
当我构建这个库并调用函数时,如下所示:
const { readFileSync } = require("fs");
const { Client } = require("ssh2");
const { runCommand } = require("myLib");
const conn = new Client();
conn
.on("ready", () => {
console.log("Client :: ready");
runCommand(conn);
})
.connect({
host: "example.com",
port: 22,
username: "me",
privateKey: readFileSync(process.env.HOME + "/.ssh/id_ed25519"),
});
由于某些原因,我的函数中的instanceof
签入将返回false
.这里到底发生了什么?是TS编译问题,还是Node.js将我的库的依赖项和消费者代码的依赖项中的Client
视为两个不同的类?
编译后的代码类似于:
const ssh2_1 = require("ssh2");
//...
function runCommand(params) {
if (params instanceof ssh2_1.Client) {
// do something
}
else {
// create our own client
// do something
}
}