TS4023: экспортированная переменная имеет или использует имя из внешнего модуля, но не может быть названа
Я видел этот ответ раньше, но они, похоже, не охватывают этот конкретный случай использования (или они не работают/помогают)
import {Route} from 'vue-router';
export const detailRoute = {
path: '/detail/:id',
component: Detail,
props: (route: Route) => ({
state: route.query.state
})
};
detailRoute использует маршрут, который я импортирую, но я думаю, что как именованный импорт {маршрут} он не работает? Есть ли другой/лучший способ сделать это, что будет работать? Я пытался!--2--> тоже, но это не помогло.
tsconfig.в JSON:
{
"compilerOptions": {
"target": "ES2017",
"module": "ES2015",
"moduleResolution": "Node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"allowSyntheticDefaultImports": true,
"noEmitHelpers": true,
"importHelpers": true,
"pretty": true,
"alwaysStrict": true,
"declaration": true,
"declarationDir": "./types",
"lib": [
"DOM",
"ES2017",
"DOM.Iterable",
"ScriptHost"
],
"baseUrl": "./client",
"paths": {
"styles/*": ["./app/core/styles/*"],
"core/*": ["./app/core/*"],
"components/*": ["./app/components/*"],
"containers/*": ["./app/containers/*"],
"assets/*": ["./assets/*"],
"config/*": ["./config/*"]
}
}
}
точной ошибки:
TS4023: Exported variable 'detailRoute' has or is using name 'Route' from external module "/Users/chris/<projectname>/node_modules/vue-router/types/router" but cannot be named.
2 ответов
компилятор не в состоянии выяснить точную форму detailRoute, потому что он не знает форму Route.
один из способов обойти это, чтобы импортировать Route из своего источника, тем самым предоставляя информацию, которую компилятор должен определить форму detailRoute.
import { Route } from "./../node_modules/vue-router/types/router";
export const detailRoute = {
props: (route: Route) => null,
};
С the на vue-router (который вы импортировали в вопросе) реэкспорт Route, он не обеспечивает прямые ссылка Route что компилятор нужен.
другой вариант-выбрать detailRoute из статического ввода вообще.
import { Route } from 'vue-router'; // index.d.ts
export const detailRoute: any = {
props: (route: Route) => null,
};
С any opts-из статической типизации компилятору не нужно выяснять форму detailRoute.
еще один вариант-это то, что вы сделали в своем собственном ответе. Поскольку вы предоставили аннотацию типа, компилятор снова не нужно выяснить форму detailRoute.
import { Route, RouteConfig } from 'vue-router'; // index.d.ts
export const detailRoute: RouteConfig = {
props: (route: Route) => null,
};
см. также
https://github.com/Microsoft/TypeScript/issues/5711
при попытке испустить [модуль] компилятору необходимо написать литерал типа объекта... представление формы модуля. Но в области нет имени, которое ссылается непосредственно на [маршрут], поэтому тип "не может быть назван", и есть ошибка.
если вы добавляете [прямой] импорт [Маршрут.].. ошибка должна исчезнуть.
по-видимому, это решение моей проблемы:
import {Route, RouteConfig} from 'vue-router';
export const detailRoute: RouteConfig = {
path: '/detail/:id',
component: Detail,
props: (route: Route) => ({
state: route.query.state
})
};
указание того, что detailRoute был RouteConfig (который, в свою очередь, использует маршрут), решило проблему. Должно быть, я неправильно понял, как это должно работать, но это исправило это.