{#each ...}を使用してプロパティ値を反復処理しようとしていますが、Svelteコンポーネントに2つの型(これはTypeScriptプロジェクトです)があります。
<script lang="ts">
import Transition from './Transition/Transition.svelte';
type Options = { text: string, value?: string }[];
type OptionsGroup = Options[];
export let options: Options | OptionsGroup = [];
</script>
{#each options as option}
<div>example</div>
{/each}
各ステートメントのオプションのタイプはOptions | OptionsGroup
と思いますが、VSCodeで次のようなエラーが発生します。
タイプの引数 'オプション| OptionsGroup 'はタイプ' ArrayLike <{text:string;のパラメーターに割り当てることができません。 値?:文字列; }> '。
ビルドタスクと開発タスクがエラーなしで正常に機能しているため、正確に何が問題になっているのかわかりません。これはVSCodeの問題のようです。
システム:
{#each}
奇妙なバグも見つけました。
可能な限り最小の再現:
<script lang="ts">
let data: { name: string } | null = null,
someArr = [1, 2, 3];
</script>
{#if data}
<!-- Works fine -->
{data.name}
{#each someArr as _}
<!-- Highlights an error! -->
{data.name}
{/each}
{/if}
Mac、VS Code、最新のプラグインを実行しています。 私はそれがこの問題にいくらか関係していると直感しています。
@dkzlvそれは#619です
これは私たちの側では修正できないのではないかと心配しています。TypeScriptの問題のようです。 これを行うと、同じエラーが発生します。
function each<T>(
array: ArrayLike<T>, // or T[], doesnt matter for the error
callbackfn: (value: T, index: number) => any
): any{ /* doesnt matter */ };
each(options, a => a); // The same TS error
そのeach
関数は、基本的にeach
ブロックのタイプチェックに使用されるものです。 型安全性を失うことなくエラーを沈黙させる方法を見つけられませんでした。
代わりにこれを行うことができます。 私は以前にこのタイプスクリプトエラーがあったと思います、そしてそれはいくつかのランダムな組み合わせを試すことによって機能しましたlol
<script lang="ts">
type Option = { text: string, value?: string };
type OptionsGroup = Option[];
export let options: Array<Option | OptionsGroup> = [];
</script>
{#each options as option}
<div>example</div>
{/each}
編集:
これらの2つのタイプは同じではないことに注意してください。ただし、ほとんどの場合、違いは気にしないでしょう。 気にする場合は、キャストするためにカスタムタイプのガードを作成する必要があります。
明確化していただきありがとうございます。推奨どおりに入力を修正しました。これでほぼ解決しました。