如何验证传递的道具在Svelte中是否为组件类型?

问题描述 投票:1回答:2

我有一个需要functionComponent的道具。所以我想通过检查道具的类型来区分它是组件还是功能。我目前正在使用以下之一。当代码被混淆时,这可能不适用于产品。想知道更好的解决方案吗?

let isSvelteComponent = component => {
    return (
      typeof component !== "undefined" &&
      component.__proto__.name === "SvelteComponentDev"
    );
  };
svelte svelte-3 svelte-component
2个回答
1
投票

宽松地说,任何功能都可能是有效的Svelte组件:

<script>
    import B from './B.svelte'

    const C = function(opts) {
        return new B(opts)
    }
</script>

<B />   

<C />

REPL

因此,从常规函数告诉appart一个Svelte组件实际上并没有一种完全可靠的方法。

在您的情况下,如果Svelte组件和函数具有不同的含义并且应以不同的方式处理,也许它们应该通过不同的道具传递?这样就可以确定到底是什么,以及它的意图。


0
投票

我能够通过如下检查原型来解决此问题

import { SvelteComponent } from "svelte";
let isSvelteComponent = component => {
   return SvelteComponent.isPrototypeOf(component);
};
© www.soinside.com 2019 - 2024. All rights reserved.