首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TS4023:导出变量<x>具有或正在使用外部模块中的名称<y>,但不能命名

TS4023:导出变量<x>具有或正在使用外部模块中的名称<y>,但不能命名
EN

Stack Overflow用户
提问于 2017-05-10 18:21:33
回答 7查看 24.8K关注 0票数 39

我以前见过这样的答案,但它们似乎没有涵盖这个特定的用例(或者它们不起作用/帮助)

代码语言:javascript
运行
复制
import {Route} from 'vue-router';


export const detailRoute = {
  path: '/detail/:id',
  component: Detail,
  props: (route: Route) => ({
    state: route.query.state
  })
};

detailRoute使用的是我正在导入的路由,但我想作为一个命名的导入{路由},它不工作吗?有什么不同的或更好的方法来做到这一点吗?我也试过export {Route};,但没有用。

tsconfig.json:

代码语言:javascript
运行
复制
    {
      "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.

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-05-10 19:23:59

编译器无法确定detailRoute的确切形状,因为它不知道Route的形状。

备选案文1

一种方法是从源导入Route,从而提供编译器确定detailRoute形状所需的信息。

代码语言:javascript
运行
复制
import { Route } from "./../node_modules/vue-router/types/router";

export const detailRoute = {
  props: (route: Route) => null,
};

由于vue-router (您在问题中是导入的)再导出Route,所以它没有提供编译器所需的直接引用Route

选项2

另一种选择是从静态类型中完全选择detailRoute

代码语言:javascript
运行
复制
import { Route } from 'vue-router'; // index.d.ts

export const detailRoute: any = {
  props: (route: Route) => null,
};

由于any选择-退出静态类型,编译器不需要计算出detailRoute的形状。

选项3

另一个选择是你在自己的答案中所做的。由于您提供了类型注释,所以编译器再次不需要计算出detailRoute的形状。

代码语言:javascript
运行
复制
import { Route, RouteConfig } from 'vue-router'; // index.d.ts

export const detailRoute: RouteConfig = {
  props: (route: Route) => null,
};

另请参阅

https://github.com/Microsoft/TypeScript/issues/5711

当试图发出模块时,编译器需要编写一个对象类型文字.表示模块的形状。但是范围中没有一个直接引用路由的名称,所以类型“不能命名”并且有一个错误。 如果你直接输入路线.错误应该消失。

票数 33
EN

Stack Overflow用户

发布于 2017-05-10 19:05:18

显然这就是解决我的问题的方法:

代码语言:javascript
运行
复制
  import {Route, RouteConfig} from 'vue-router';


  export const detailRoute: RouteConfig = {
    path: '/detail/:id',
    component: Detail,
    props: (route: Route) => ({
      state: route.query.state
    })
  };

指定detailRoute是一个RouteConfig (反过来使用路由)解决了这个问题。我一定是误解了这是怎么回事,但是这个解决了它。

票数 9
EN

Stack Overflow用户

发布于 2021-11-07 06:18:44

对我来说,这个问题是因为我试图构建一个库,做:

代码语言:javascript
运行
复制
interface Props {...};
const MyComponent = ({...}:Props)=>{<>...</>}

我改为:

代码语言:javascript
运行
复制
type Props = {...};

问题解决了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43900035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档