Vue + ts 中,引用.vue文件导出的方法,ts无法解析解决办法。

前提

vue SFC 对于ts的支持不太行。

比方我在vue SFC 文件中导出一个函数如下

<!-- A.vue -->
<template></template>
<script lang='ts'>
export function getName(){
// ...
}
export default {
    data(){
        return {}
    },
    // ...
}
</script>

在其他文件中引入

import { getName } from 'xxx.vue';

此时ts引擎会提示:

Module '"*.vue"' has no exported member 'getParamKeys'. Did you mean to use 'import getParamKeys from "*.vue" instead'

 但是代码可以正常运行。

也就是.vue 文件中导出的东西是正常的。

原因

vue和ts一起使用的时候,由于ts引擎不能识别.vue 结尾的文件。因此一般会有一个.d.ts声明文件。比如shims-vue.d.ts,其中定义了 "*.vue" 的类型,只有一个 export default 

所以在ts文件中引入的时候就会提示这个错误。

解决

单独为某个.vue 文件定义一个声明比如

declare module '*/components/Select.vue' {
    function getName(name:string):string;
    export { getName };
}
// 一定要写在 '*.vue'之前
declare module '*.vue' {
    //...
}

这个声明一定要写在 ’*.vue' 之前。否则会优先匹配 '*.vue'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值