LoginSignup
4
3

More than 5 years have passed since last update.

Visual Studioのコード補完が効かないときに疑ってみること

Last updated at Posted at 2014-12-04

昨日からVisual StudioでJavaScript / Node.jsを書いています。拡張子は「.ts」なんですが、JavaScriptを書いています。

Google Drive APIを使ってファイルをアップロードするコードを書いているのですが、@vvakameさんが作られたgapidtsで入れた型定義ファイルがサンプルコードに対して警告を返し、コード補完が効かなくなります。えええ、どうなってんの?サンプルコードだよ?

いろいろ調べた結果、以下の2つのことが起こっていました:

1. プロパティがすべて必須プロパティと解釈されている

Google Drive APIを使うモジュールの型定義ファイルの中を見てみましょう・・・んー?

    interface IFile {
        alternateLink: string;
        appDataContents: boolean;
        copyable: boolean;
        createdDate: string; // date-time
        defaultOpenWithLink: string;
        description: string;
        downloadUrl: string;
        editable: boolean;
        embedLink: string;
        etag: string;
        explicitlyTrashed: boolean;
        exportLinks: {
            [name:string]: string;
        };
        fileExtension: string;
        ...

おおお、全部必須プロパティになっている。これだと、どれか一つでもプロパティを指定しないと警告が出ます(ちなみにIFileのプロパティはちょうど50個あります)。かといって全部にnullを入れるのも何ですから、以下のようにオプショナルなプロパティにします(もちろん手作業ではなくて置換します)。

    interface IFile {
        alternateLink?: string;
        appDataContents?: boolean;
        copyable?: boolean;
        createdDate?: string; // date-time
        defaultOpenWithLink?: string;
        description?: string;
        downloadUrl?: string;
        editable?: boolean;
        embedLink?: string;
        etag?: string;
        explicitlyTrashed?: boolean;
        exportLinks?: {
            [name:string]: string;
        };
        fileExtension?: string;
        ...

これでコード補完が効くようになります

なお、@ken_zookieさんには「型定義がメンテされるのに期待して any に逃げるのも、TypeScript だからこそできるベストエフォートタイピング」と教えてもらいました。なるほどー

2. 同じモジュールを使う型定義ファイルは1つにまとめる

今回使った2つの型定義ファイルは両方とも同じモジュールgoogleapisの型定義ファイルでした。しかしこれだと「定義が2重になっている」と警告が出てコード補完が効かなくなります

vsnode50.jpg

仕方がないので片方をコピーしてもう片方に貼り付け、適宜直しました。これで、コード補完が効くようになりました

なんだか思ったより大変だな・・・まあでも問題は解決したので良しとしましょう!


ブログやってます:Weed software

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3