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

vue.js - 想问一下vue3和typescript一起使用的问题?

党博超
2023-06-15

为什么同样是对Props的类型声明,当组件缺少应有的props的时候,vue不会提示,但react会呢?请问是我哪里设置有误还是本身就是这样?

Vue

父组件:

<template>
  <div>
    子组件:
    <!-- (property) SonComp: any -->
    <SonComp></SonComp>
  </div>
</template>

<script setup lang="ts">
import SonComp from '@/components/SonComp.vue'
</script>

<style scoped></style>

子组件:

<template>
  <div>
    {{ props.msg }}
  </div>
</template>

<script setup lang="ts">
const props = defineProps<{ msg: string }>()
/* 或者
const props = defineProps({
  msg: {
    type: String,
    required: true
  }
})
*/
</script>

<style scoped></style>

React

function SonComp(props: { msg: string }) {
  return <>{props.msg}</>;
}

function App() {
  return (
    <div>
      子组件:
      {/* 类型 "{}" 中缺少属性 "msg",但类型 "{ msg: string; }" 中需要该属性。ts(2741) */}
      {/* function SonComp(props: {msg: string;}): JSX.Element */}
      <SonComp></SonComp>
    </div>
  );
}

export default App;

问题已解决。见 https://github.com/vuejs/core/issues/8524
vue3.3.4,切换vscode的volar插件为预发布版本(1.7.13)即可

共有2个答案

鞠边浩
2023-06-15

问题已解决。见 https://github.com/vuejs/core/issues/8524
vue3.3.4,切换vscode的volar插件为预发布版本(1.7.13)即可

方博
2023-06-15

你这个vue没有用到ts的类型声明呀,你用的是vue自带的类型校验,只会在控制台报错的,ts应该这么用

<script setup lang="ts">
const props = defineProps<{ msg: string }>()
</script>
 类似资料:
  • 使用的是 vite-plugin-qiankun 插件 看了qiankun的示例代码,在vite.config.ts里写: 但是我本身的项目里有 怎么把上面的2种export default合并成1个export default?

  • 我按照http://uwsgi-docs.readthedocs.org/en/latest/tutorials/django_and_nginx.html中的步骤执行,但是当所有步骤完成后没有任何错误时,我访问127.0.0.1:8000,它的响应是超时,我的nginx日志显示 上游超时(110:连接超时)从上游读取响应标头时, 顺便说一句,我可以访问127.0.0.1:8001,在那里uwsg

  • 想问一下一个C语言的位运算小问题. 有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果? 比如35=(000..0100011),得到32或者1? 用循环写的话不难,但,用一个简洁的表达式能写出来吗?

  • 在文件 /src/stores/otpInfos.ts 的第 7 行,TypeScript 报出以下错误(但是执行 pnpm dev 运行是没有任何问题的): 如果没有引用 ".pnpm/@vueuse+shared@9.13.0_vue@3.3.4/node_modules/@vueuse/shared",则无法命名 "useOTPInfosStore" 的推断类型。这很可能不可移植。需要类型注

  • 定义一个组件: 来调用这个组件的页面: 运行之后点击页面中的文字atts,你会发现alert弹出了一次。按理说不是应该弹出两次才对的吗? 然后我略微的修改下组件: 这次再来点击中的文字atts,你会发现alert弹出了两次。 啥原因啊?

  • vue3+ts+element-plus 使用下拉框时,部分值使用v-for循环出来,然后发现值是'',但下拉框不会渲染出来全部 如果在businessOptions里直接加上全部,就可以展示出来 但是这个值还得用在其他地方,因此不想加上全部 能否解决这个问题