JS库的Typescript自定义类型,导入无效
我有一个带有typescript的vue项目,我正在导入为创建的自定义类型,但这会生成错误: /Users/bmartins/Development/app invest/src/main.ts中出现错误(14,30): 14:30找不到模块“vue数字筛选器”的声明文件/Users/bmartins/Development/app invest/node_modules/vue numeric filter/dist/vue numeric filter.es.js“隐式”具有“any”类型。 尝试JS库的Typescript自定义类型,导入无效,typescript,vue.js,types,typescript2.0,Typescript,Vue.js,Types,Typescript2.0,我有一个带有typescript的vue项目,我正在导入为创建的自定义类型,但这会生成错误: /Users/bmartins/Development/app invest/src/main.ts中出现错误(14,30): 14:30找不到模块“vue数字筛选器”的声明文件/Users/bmartins/Development/app invest/node_modules/vue numeric filter/dist/vue numeric filter.es.js“隐式”具有“any”类型。
npm安装@types/vue numeric filter
(如果存在),或添加包含声明模块“vue numeric filter”的新声明(.d.ts)文件代码>
在main.ts文件中,我有:
从“Vue”导入Vue;
从“/App.vue”导入应用程序;
从“Vuetify”导入Vuetify;
从“/plugins/vuetify”导入vuetify;
从“./router”导入路由器;
从“vue-apexcharts”导入VueAppExCharts;
从“Vuex”导入Vuex;
从“./store”导入存储;
从“./test/mock/store”导入{mockStore};
从“时刻”导入*作为时刻;
导入“时刻/地点/pt br”;
从“vue矩”导入VueMoment;
从“./store/constants”导入{API_URL,产品_类型};
从“vue数字过滤器”导入VueNumeralFilter;
Vue.组件('apexchart',VueAppEXCHARTS);
Vue.use(Vuetify);
Vue.use(Vuex);
use(VueNumeralFilter,{locale:'pt br'});
Vue.use(VueMoment{
那一刻,
});
对于我创建的文件夹结构类型:
App
|_ src
|_ types
|_ vue-numeral-filter
|_ index.d.ts
我根据以下内容创建的索引d.ts:
从“数字”导入数字;
从“vue”导入{PluginObject};
声明命名空间VueNumeralFilterPlugin{
接口选项{
//可选(自维护)数字实例
数字?:数字;
}
接口VueStatic扩展数字{
(inp?:数字,格式?:字符串):字符串;
(inp?:数字):字符串;
}
}
声明模块“vue数字过滤器”{
接口Vue{
$numeric:VueNumeralFilterPlugin.VueStatic;
}
}
类型VueNumeralFilter=PluginObject;
声明常量VueNumeralFilter:VueNumeralFilter;
导出=VueNumeralFilter;
最后一部分是更改tsconfig.json:
{
“编译器选项”:{
“目标”:“esnext”,
“模块”:“esnext”,
“严格”:是的,
“jsx”:“保存”,
“进口者”:没错,
“moduleResolution”:“节点”,
“skipLibCheck”:正确,
“esModuleInterop”:正确,
“allowSyntheticDefaultImports”:true,
“源地图”:正确,
“baseUrl”:“,
“类型根”:[
“/类型”
],
“类型”:[
“网页包环境”,
“vue数字过滤器”,
“vuetify表单库”
],
“路径”:{
"@/*": [
“src/*”
]
},
“lib”:[
“下一步”,
“dom”,
“dom.iterable”,
“脚本主机”
]
},
“包括”:[
“src/***.ts”,
“src/***.tsx”,
“src/***.vue”,
“测试/***/.ts”,
“测试/***/*.tsx”
],
“排除”:[
“节点_模块”
]
}
我读了这篇文章好几次,它有一个惊人的解释,但仍然不知道如何解决它
有什么帮助吗?类型定义文件在Typescript中可能有点挑剔。很容易编写TypeScript解释为模块而不是声明文件的东西。发生这种情况时,TypeScript开始希望您直接从文件导入类型,而不是识别嵌入的类型声明
在我看来,您的类型定义文件不正确。特别是,在模块声明之外有import
s,这是TypeScript识别为模块标记的标志之一。如果移动import
s,使它们位于declare{…}
块中,我认为它将开始工作
另一方面,我认为您的tsconfig.json
文件中的typeroot
和types
条目限制过度。我不认为这是造成问题的原因,但我认为您应该删除它们,否则您将在将来安装第三方类型时遇到问题。类型定义文件在Typescript中可能有点挑剔。很容易编写TypeScript解释为模块而不是声明文件的东西。发生这种情况时,TypeScript开始希望您直接从文件导入类型,而不是识别嵌入的类型声明
在我看来,您的类型定义文件不正确。特别是,在模块声明之外有import
s,这是TypeScript识别为模块标记的标志之一。如果移动import
s,使它们位于declare{…}
块中,我认为它将开始工作
另一方面,我认为您的tsconfig.json
文件中的typeroot
和types
条目限制过度。我不认为这是造成问题的原因,但我认为您应该删除它们,否则您将在将来安装第三方类型时遇到问题。谢谢您的回答,它可以工作!我还注意到,如果我获取准确的声明文件并移动到@types文件夹中的node_模块,它就会工作!似乎node_模块中的声明文件也有一些不同的解释!谢谢你的回答,它是有效的!我还注意到,如果我获取准确的声明文件并移动到@types文件夹中的node_模块,它就会工作!似乎node_模块中的声明文件也有一些不同的解释!