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 (который, в свою очередь, использует маршрут), решило проблему. Должно быть, я неправильно понял, как это должно работать, но это исправило это.