【发布时间】:2021-01-12 06:32:03
【问题描述】:
我有一个带有 typescript 的 vue 项目,并且我正在导入我为 vue-numeral-filter 创建的自定义类型,但这会产生错误:
/Users/bmartins/Development/app-invest/src/main.ts(14,30) 中的错误: 14:30 找不到模块“vue-numeral-filter”的声明文件。 '/Users/bmartins/Development/app-invest/node_modules/vue-numeral-filter/dist/vue-numeral-filter.es.js' 隐含了一个 'any' 类型。 尝试
npm install @types/vue-numeral-filter(如果存在)或添加包含declare module 'vue-numeral-filter';的新声明(.d.ts)文件
在我的 main.ts 文件中,我有:
import Vue from 'vue';
import App from './App.vue';
import Vuetify from 'vuetify';
import vuetify from './plugins/vuetify';
import router from './router';
import VueApexCharts from 'vue-apexcharts';
import Vuex from 'vuex';
import store from './store';
import { mockStore } from './test/mock/store';
import * as moment from 'moment';
import 'moment/locale/pt-br';
import VueMoment from 'vue-moment';
import { API_URL, PRODUCT_TYPES } from './store/constants';
import VueNumeralFilter from 'vue-numeral-filter';
Vue.component('apexchart', VueApexCharts);
Vue.use(Vuetify);
Vue.use(Vuex);
Vue.use(VueNumeralFilter, { locale: 'pt-br' });
Vue.use(VueMoment, {
moment,
});
对于我创建文件夹结构的类型:
App
|_ src
|_ types
|_ vue-numeral-filter
|_ index.d.ts
我基于@types/vue-moment创建的index.d.ts:
import Numeral from 'numeral';
import { PluginObject } from 'vue';
declare namespace VueNumeralFilterPlugin {
interface Options {
// The optional (self-maintained) numeral instance
numeral?: Numeral;
}
interface VueStatic extends Numeral {
(inp?: Numeral, format?: string): string;
(inp?: Numeral): string;
}
}
declare module 'vue-numeral-filter' {
interface Vue {
$numeral: VueNumeralFilterPlugin.VueStatic;
}
}
type VueNumeralFilter = PluginObject<undefined>;
declare const VueNumeralFilter: VueNumeralFilter;
export = VueNumeralFilter;
最后一部分是更改 tsconfig.json:
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"importHelpers": true,
"moduleResolution": "node",
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"baseUrl": ".",
"typeRoots": [
"./types"
],
"types": [
"webpack-env",
"vue-numeral-filter",
"vuetify-form-base"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
],
"exclude": [
"node_modules"
]
}
我看了这篇TypeScript 2: custom typings for untyped npm module的帖子,看了好几遍,里面的解释很神奇,但还是不知道怎么解决……
有什么帮助吗?
【问题讨论】:
标签: typescript vue.js types typescript2.0