バグの説明
これは純粋に美的です。 VScode でファイルまたはコンポーネントを自動的にインポートすると、新しいインポートがファイルに正しく追加されません。
.ts
および.svelte
ファイルの異なる位置に挿入されます。typescript.preferences.quoteStyle: single
を使用すると、インポートでは二重引用符が引き続き使用されます。再現する
sveltejs/template
から新しいプロジェクトを作成し、空のTest.svelte
コンポーネントを作成して、それをApp.svelte
自動インポートします。 TypeScript プロジェクトでは、 .ts
ファイルからのインポートが、スクリプト タグの直後に改行なしで挿入されていることもわかります。
予想される行動
自動インポートは、通常の.ts
ファイルの場合とまったく同じように機能することを期待していますが、スクリプト タグによるインデントがいくつかあります。
私のコードは、手動作業なしで次のようになっているはずです。
<script lang="ts">
import Test from './Test.svelte';
import { testStore } from './test';
export let name;
</script>
システム (次の情報を入力してください):
根本的な問題は、テンプレート内でのインポート中に、その時点でコードが無効になるため、svelte コンパイラがエラーをスローすることです。 そうすると、 svelte2tsx
は有効なtsx
ファイルを生成できないため、スクリプトタグのコンテンツのみを使用することになります。 パーサーが有効なコードを出力する場合、 svelte2tsx
は変換されたtsx
ファイルを生成します。 これにより、TypeScript はインポートを別の場所に挿入し、生成されたtsx
から元のsvelte
へのマッピングはそれを上部にインポートします。 これらの問題を良い方法で回避する方法がわかりません。 ただし、ユーザーの好み (引用スタイル) に従うことは可能です。 回避策として、「インポートの整理」コマンドを使用すると、よりきれいなフォーマットでインデントと引用符のスタイルが処理されます。
@dummdidummの説明と回避策に感謝します。 😄
それらを既存のインポートの下に挿入する方法があれば、現在の動作よりも大幅に改善されます。 拡張機能は (ビデオ チュートリアルのように) もう少し見やすくなり、さらに重要なことに、インポートは一貫性を感じます (最新のインポートを一番上に探すのは珍しいことです)。
Vetur で 3 つのインポート ( test
、 test2
、 test3
順) をテストしたところ、正しい位置に挿入されました。 比較した結果は次のとおりです。
Vetur:
<script lang="ts">
import Vue from 'vue';
import { testStore1 } from './test';
import { testStore2 } from './test2';
import { testStore3 } from './test3';
export default Vue.extend({ /*...*/ });
</script>
VSCode の Svelte:
<script lang="ts">import { testStore3 } from "./test3";
import { testStore2 } from "./test2";
import { testStore } from "./test";
export let name: string;
</script>
js/ts には別の問題があります。 ソースマップは、最後のインポートの次の行を元の位置にマップできません。