質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

2541閲覧

自作API利用時にオブジェクト定数の入力補完をさせたい

KanaSakaguchi

総合スコア52

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/05/16 04:31

編集2017/06/02 10:52

###前提・実現したいこと
例えばUtilities.Charset.のような入力補完をさせたいです。
入力補完

ですが、利用側でAPI.Column.とするとObject型の補完が出てきます。
Objectの入力補完

自作API側でそのためのdocコメントを書く必要があるのだと思いますが、どう書けば良いのかわかりません。
どうすれば入力補完できるようになるでしょうか?

自作APIでの定義

javascript

1var Column = { 2 UNCATEGORISED: 1, 3 DESIGN_REVIEW_PENDING: 2, 4 IN_IMPLEMENTATION: 3, 5 REVIEW_PENDING: 4, 6 SELF_TEST_PENDING: 5, 7 TEST_PENDING: 6, 8 END: 7 9};

試したdocコメント

以下のようなdocコメントを書いてバージョンを更新しましたが、補完はされませんでした。

javascript

1/** 2 * @const {number} 3 */ 4var Column = {

javascript

1/** 2 * @enum {number} 3 */ 4var Column = {

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

自己解決したので回答します。
質問では自作APIとしてAPIという名前を使いましたが、ややこしいと思ったので以下ではMyAPIとします。
(ちなみにMyAPIColumnも実際の名前とは異なります。)

ColumnMyAPIと別のAPIにすると意図した通りに補完されました。

  1. ColumnMyAPIと別のAPIとして作成

この時列挙型ではなくそれぞれのキーと値をグローバル変数として定義する
2. MyAPIで使用するライブラリとしてColumnを登録
3. このままではColumnが補完されなくなるのでMyAPIColumnのグローバル変数を用意
4. MyAPIを使いたいプロジェクトでもライブラリとしてColumnを登録
5. これでColumnのキーが補完されるようになった

Columnプロジェクトのコード

javascript

1/** @type {number} */ 2var UNCATEGORISED = 1; 3 4/** @type {number} */ 5var DESIGN_REVIEW_PENDING = 2; 6 7/* 以下略 */

MyAPIに書くコード

javascript

1/** @type {Column} */ 2var Column = Column;

補完された。
MyAPI.Column.が補完されるようになった


kei344さんの回答を見て"GASはグローバルなものしか補完されない&Objectのキーは調べてくれないもの"として諦めようかと思っていたのですが、ふと「別ライブラリにすればいけるかも?」と思ったのが当たりました。
MyAPIを使いたいプロジェクトでColumnも登録しないといけない(&MyAPIで列挙型が増えるたびに登録ライブラリが増える)ことなどちょっとなと思う部分はありますが、この方法以外で列挙型を定義できないということも含めて仕様だと思うことにしました。

投稿2017/06/02 11:10

編集2017/06/02 11:21
KanaSakaguchi

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メソッド以外補完されないのでは。

【GASのライブラリでクラス化と補完 - Qiita】
http://qiita.com/soundTricker/items/42c114945c20624da237

補完メソッドとして表示されるのは、グローバルメソッドのみだからです。

投稿2017/05/29 03:11

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KanaSakaguchi

2017/05/30 12:33

グローバル変数は型がなんであれ補完されます。 今回の場合`API.`で`Colmun`が候補に出てきます。 ObjectではなくEnumであることを型宣言(@type)以外でGASにわからせることができればその先も補完されると考えているのですが、そのためのdocコメントの書き方がわからなくて。 `Utilities.Charset`などの実装が見られればいいのですが・・・。
kei344

2017/05/30 12:42

見当違いな回答だったようですね、すみません。
guest

0

Charset は Enum です。Column を Enum で実装してみてください。

投稿2017/05/16 04:52

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/05/16 04:56

おっと、Enum になっていますね。誤答です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問