当前位置: 首页 > 知识库问答 >
问题:

前端 - Vue 3 代码分离后模板的变量类型全部推导成了 never?

苏洛城
2023-05-21

由于项目功能越来越多,单个 vue 文件代码量过于臃肿,因此产生了将代码分离的想法并在昨天手写了个 npm script 用来生成组件套件。
生成的代码文件如果不使用 TS 是没有任何报错信息的,反之则会在模板文件出现类型推导错误的情况,生成的代码如下:

// index.ts
import { defineComponent, ref } from 'vue';
import './index.scss';

export default defineComponent({
  setup (props, { emit }) {
    const msg = ref("命令生成文件");
    return {
      msg
    }
  }
});
  
<!-- index.vue -->
<template>
  <p>权限视角</p>
</template>

<script lang="ts">
import businessComponent from './index';
// @ts-ignore
export default defineComponent({...businessComponent});
</script>
p {
    font: 14px/500;
}

在生成的 .vue 文件中,如果不加入 // @ts-ignore 会出现错误提示 没有与此调用匹配的重载;而加上后,不管在 TS 文件如何定义类型,整个文件的类型都自动变成了 never

有没有大神知道这是怎么回事?

补充

  1. Vue 3 组件套件生成源码

共有1个答案

孔和风
2023-05-21

把ts里的defineComponent去掉,或者把vue里的改成export {default} from './index'

 类似资料:
  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type

  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type

  • 主要内容:Java10 局部变量类型推断,声明局部变量的旧用法,声明局部变量的新用法,需要注意的事项,Java10 局部变量类型推断的示例Java10 局部变量类型推断 局部变量类型推断是 Java 10 以后可用语言最明显的变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。 声明局部变量的旧用法 声明局部变量的新用法 需要注意的事项 在成员变量、方法参数、返回值的情况下没有类型推断。 局部变量应在声明时初始化,否则编译器将无法

  • 前后端分离 在B/S架构的环境中,前后端分离一直都众说纷纭,没有一个标准。我觉得打开可以分为三个阶段: 传统的分离方法 传统意义上的前后端分离,前端指的是美工、切图、设计,后端是实现代码、数据库相关的实现。美工设计和生成的前端页面,给到程序员来做集成。那么这里其实就不分什么前后端了,程序员从数据库一直搞到前端页面的样式,就是“全能型运动员“。当然,一般传统上的开发协作模式有两种: 一种是前端先写一

  • 我试图在变量函数模板上使用'decltype'来获取其返回值类型,然后使用它来定义成员变量。但我一直在犯这样的错误: 基本上,decltype失败并将声明为int,而不是推断的返回类型。 它的工作原理是当我提供的所有参数的值,但这不是我要找的行为。因为我不知道该函数有多少参数,所以它必须保持为可变模板函数。 我计划如何使用类模板的示例: 如果我没有任何成员变量,并使用作为: 它编译,因此我相信能够

  • 此代码只是使用中间的来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。 让我们给局部类型推断一个机会吧,我(天真地)想...于是我将上面的代码改为: 这对我来说是有意义的,因为的类型可以从的类型推断出来,或者我是这么想的。但是,修改后的代码无法编译,并生成以下错误: 注意1:编译代码的一种方法是将返回类型更改为。不过,那是一套很难用的... 注意2:另一种方法是在比较器中不使用逆变,但我