TypeScriptで自作の型定義ファイルを追加する

「あんまり分かってないけどこう書いたらなぜか動いた」くらいの理解度なので
ベストプラクティスではない可能性があるので注意してください。

 

tunnel-sshというnpmパッケージを使おうと思いました。

でも型定義ファイルが提供されていませんでした。

▲型定義が提供されていない場合、strict:trueの場合(もっと具体的にいうとnoImplicitAny:trueの場合)に以下のようにエラーが出てしまう。

DefinitelyTypedで型定義ファイルは公開はされていたのですが、最新バージョンに対応したものではなかったみたいで、使えませんでした。

なので自分で追加することにしました。

 

@types/tunnel-ssh/index.d.ts を作って、以下のような型定義を追加。

import { Server, ListenOptions } from "net";
import { Client, ConnectConfig } from "ssh2";

declare module "tunnel-ssh" {
  interface TunnelOptions {
    autoClose: boolean;
  }

  interface ForwardOptions {
    srcAddr: string;
    srcPort: number;
    dstAddr: string;
    dstPort: number;
  }

  function createTunnel(
    tunnelOptions: TunnelOptions,
    serverOptions: ListenOptions,
    sshOptions: ConnectConfig,
    forwardOptions: ForwardOptions
  ): Promise<[Server, Client]>;
}

 

tsconfig.jsonに以下の内容を追加。

"baseUrl": ".",
"paths": {
      "*": ["./@types/*"]
    }

 

これで無事に補完が効くようになりました。

 

ちなみに@types/tunnel-ssh/index.d.tsじゃなくて、

  1. tunnel-ssh.d.tsというファイル名にする
  2. トップディレクトリに配置する

という風にすると、tsconfig.jsonを変更せずとも補完を効かすことができました。

 

というか正直、この程度のかんたんなパッケージなら//ts-ignoreで部分的にanyを許容する形で良い気がする。。

 

おわり

コメント

タイトルとURLをコピーしました