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);
