https://codesandbox.io/s/magical-carson-n6540i?file=/src/Icon.vueIcon.vue
<script lang="ts">
import { defineComponent, computed, defineAsyncComponent } from "vue";
export default defineComponent({
  props: ["icon"],
  setup(props) {
    const iconCompoent = computed(() => {
      return defineAsyncComponent(async () => {
        return (await import("@vicons/ionicons5"))[props.icon];
      });
    });
    return {
      iconCompoent,
    };
  },
});
</script>
<template>
  <n-icon :component="iconCompoent" />
</template>
使用
Demo.vue
<template>
  <Icon icon="GameController" />
  <Icon icon="GameController" size="40" color="#0e7a0d" />
</template>
<script lang="ts">
import { defineComponent } from "vue";
import Icon from "./Icon.vue";
export default defineComponent({
  components: {
    Icon,
  },
});
</script>