Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

昨日から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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away