性格悪い人が優勝

VSCodeにてJavaScriptを始めたばかりの物です

JavaScriptの関数内でインテリセンス機能が上手く働いていないのですが改善方法はありますか?

例えば以下のようなコードを書いた時にsplitが補完されません
関数の外では補完されます
また関数の外で1度でも使ったメソッドなどは関数内でも補完候補にあがります
おそらくメソッドとしてではなく過去の記述から候補にあげているだけのようです

function f(str) {
return str.split(' ');
}

const a = "abc def";
console.log(f(a));

質問者からの補足コメント

  • naktakさんへ
    naktakさんの回答に対して私の理解不足でした
    No.5さんの回答で意味が理解できました
    申し訳ありません、謝罪します。

      補足日時:2021/08/12 20:10

A 回答 (5件)

ちょっと戻り値の説明について誤っていたので修正しました。



ちなみにコメントは、
/**
まで入力してEnterを押せば、関数の定義に応じて少し自動生成してくれます。
「VSCodeとJavaScriptについ」の回答画像3
    • good
    • 0
この回答へのお礼

質問とはまったく違いますので失礼します
ありがとうございます

お礼日時:2021/08/12 13:12

No4です。



書いてから気が付いたのですが、
strが、文字列であるかどうかというのが、
No2さんのおっしゃる

>型とその説明が表記されてくる

ってことだったんですね。
大変失礼しました。

/**
* @param {string} str コメントにこれを書くと
*/
function f(str, str2) {
str.split(' '); // 出る
str2.split(' '); // 出ない
}

コメントを書くと、デフォルト値入れなくても出ました。
    • good
    • 0
この回答へのお礼

ありがとうございました
sukitaroさんのおかげでNo.4さんの言っていることがやっとりかいできました

お礼日時:2021/08/12 20:07

わたしの環境でもやってみました。



たぶんですが、splitが候補に出るためには、
strが文字列であることが分かっていないと
いけないのではないかと思いました。

const a = "abc def";
a.split(' ') // 出る
const b = 123;
b.split(' ') // 出ない(履歴には出る。以下同じ)
const c = [1,2,3];
c.split(' '); // 出ない
const d = {a:'aaa',b:'bbb'};
d.split(' ') // 出ない

文字列であることを明示するために、
デフォルト値を入れるとうまくいきました。

function f(str = 'abc def', str2) {
str.split(' '); // 出る
str2.split(' '); // 出ない
}
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2021/08/12 20:07

function f()の引数について、インテリセンスがきかないというお話でしたね。



JavaScriptはそもそも型定義はありませんので、何もしない状態ではインテリセンスは効きません。

画像のようにコメントを用意することで、呼出時にも型とその説明が表記されてくるし、関数内で仮引数を利用した時にも型を基準にインテリセンスが効きます。
仮引数の型や説明の他に、関数の説明、戻り値の説明も動作します。
ちょっと私が使っている拡張機能は違いますが、同じように動作すると思います。

型は、string, numberに限らず、オブジェクトの指定も可能です。

画像は恐らく小さく見えてしまうので、画像のURLをブラウザに貼り付けて拡大するなどして確認してみてください。

ほとんどのIDEでもコメントによってそういう動作をしてくれますので、
どんな言語でも正しくコメントを書くクセをつけるのがベター、ということですね。
「VSCodeとJavaScriptについ」の回答画像2
    • good
    • 0
この回答へのお礼

>function f()の引数について、インテリセンスがきかないというお話でしたね

いいえ、違います
質問文をよくお読みください

>例えば以下のようなコードを書いた時にsplitが補完されません

通常なら
return str.s あたりまで打てばsplitと補完機能が働くはずが働かないという話で引数の話は一切していません

本来ならnaktacさんの提供していただいた画像の右上のようにstr.と打ったところでsplitが候補として出るはずです
それが関数内ではその機能が働かないという話ですね

ついでに言うなら関数の外ではその補完機能は働きます

画像まで編集していただけありがとうございました

お礼日時:2021/08/12 13:10

下記のような拡張機能を入れてみたらいかがですか。



https://marketplace.visualstudio.com/items?itemN …
    • good
    • 0
この回答へのお礼

回答ありがとうございます
その拡張機能は既に入ってます

他に何か思い当たるところがあれば、またよろしくお願いします

お礼日時:2021/08/12 09:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!