typescript - 根据另一个属性值键入 Svelte 组件属性

标签 typescript svelte svelte-3 svelte-component

在 svelte 组件中

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

    // ...
</script>

<!-- ... -->

value 属性的类型应该是 string 如果 multiple == falsestring[] 否则.如何实现?

编辑: 这个想法是得到一个 Discriminated Union对组件的影响。

最佳答案

您需要将“值”的类型设为条件类型。为此,您应该声明一个函数,该函数将为您确定并返回类型。这可以像这样完成:

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

然后你可以定义你的 props,'value' 的类型将设置为字符串,除非组件声明将 'multiple' 设置为 true,其中 'value' 的类型将变为 string[]。

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

关于typescript - 根据另一个属性值键入 Svelte 组件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66526968/

相关文章:

javascript - 指定 `keyof? 时拒绝 Typescript 泛型?

Angular 2 GET 参数保持为空

javascript - 基于 Svelte 类的组件示例

基于 Svelte 选择的主/细节未正确更新

svelte - 如何在本地运行的 Svelte REPL 站点中使用本地构建的 Svelte 3 编译器?

ionic-framework - 如何使用 Ionic 设置 Svelte.js?

Typescript 定义、ES6 类和构造函数

javascript - Svelte - 监视组件外部组件属性的更改(访问器)

reactjs - 我该如何解决这个错误 'don' t use object as a type'?