typescript - Angi typen til en Svelte-komponents egenskap basert på verdien til en annen egenskap


I svelte-komponenten

<script lang="ts">
    export let multiple: boolean = false;
    export let value: string|string[];

    // ...
</script>

<!-- ... -->

typen til value-egenskapen bør være string hvis multiple == false og string[] ellers. Hvordan kan dette oppnås?

Rediger: Ideen er å få en diskriminert union-effekt for komponenter.

Svar #1

Du må gjøre typen til 'value' til en betinget type. For å gjøre dette bør du erklære en funksjon som vil bestemme og returnere typen for deg. Dette kan gjøres slik:

declare function f<T extends boolean>(x: T): T extends false ? string : string[];

Da kan du ha dine props definert, og typen til 'value' vil bli satt til string med mindre komponentdeklarasjonen setter 'multiple' til true, hvor typen til 'value' vil bli string[].

export let multiple: boolean = false;
export let value = f(multiple);