typescript 如何正确推断苗条 prop 类型?

thtygnil  于 2023-06-07  发布在  TypeScript
关注(0)|答案(1)|浏览(202)

我有一个svelte组件(SvelteKit项目)--让我们称之为MyComponent。它接受 * 两个 * prop 。
使用TypeScript的正确方法是什么?

选项一:对$$props进行类型转换

<script lang="ts">
    interface ComponentPropType {
        a: string;
        b: number;
    }

    export let { a, b } = $$props as ComponentPropType;
</script>

<h1>a = {a} </h1>
<p>My value is {b} </p>

或者我应该用一点冗长

选项二:解结构化export let指定的props

<script lang="ts">
    interface ComponentPropType {
        a: string;
        b: number;
    }
    export let props: ComponentPropType;
    export let { a, b } = props;
</script>

<h1>a = {a} </h1>
<p>My value is {b} </p>

如果我们使用选项1-我们可以将组件渲染为<MyComponent {{a, b}} /><MyComponent {a} {b} />这是否会阻止事件转发(如果有)?
另一方面,如果我们使用选项2-我们需要将组件渲染为<MyComponent props={{a, b}} />。在这种情况下,我们不能使用prop-spread。
哪一个是正确的做法呢?有更好的解决方案吗?

kxe2p93d

kxe2p93d1#

我不认为这是必要的,但我不是100%确定你想达到什么目的。
只需要用export let定义props就足够了

<script lang="ts">
    export let a: string
    export let b: number;
</script>

<h1>a = {a} </h1>
<p>My value is {b} </p>

这将足以让您使用直接赋值
<Component a={"a"} b={2} />
或传播
<Component {...{a:"a", b:2}} />
请注意,需要使用扩展运算符,因为{{a,b}}{...{a,b}}不同

相关问题