【问题标题】:Typescript - Import class with path alias failedTypescript - 导入具有路径别名的类失败
【发布时间】:2019-04-22 13:37:47
【问题描述】:

我正在使用 OvernightJS 尝试 Typescript,但在尝试将类导入我的控制器时遇到问题,出现错误提示:

错误:找不到模块“@Models/company”

不知何故,当我将导入更改为 '../models/company' 并且它起作用了。导入“@Models/firebase”也可以正常工作。

用户控制器:

import { Controller, Get } from '@overnightjs/core'
import { Request, Response } from 'express'
import CompanyModel from '@Models/company'

@Controller('api/company')
export class CompanyController {
  private readonly company = new CompanyModel()

  @Get()
  private async get(req: Request, res: Response): Promise<any> {
    const companies = await this.company.getAllCompanies()

    return res.status(200).json({
      data: {
        companies
      }
    })
  }
}

公司模型类:

import * as firebaseAdmin from 'firebase-admin'
import { Firestore, QuerySnapshot, QueryDocumentSnapshot } from '@Models/firebase'

class CompanyModel {
  private readonly firestore: Firestore

  constructor () {
    this.firestore = firebaseAdmin.firestore()
  }

  async getAllCompanies() {
    return await new Promise((resolve: any) => {
      this.firestore.collection('/companies').onSnapshot((snapshot: QuerySnapshot) => {
        const docs = snapshot.docs.map((doc: QueryDocumentSnapshot) => {
          return doc.data()
        })

        resolve(docs)
      })
    })
  }
}

export default CompanyModel

tsconfig:

{
  "compilerOptions": {
    "target": "es5",
    "baseUrl": "./src",
    "allowJs": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "paths": {
      "@Models/*": ["models/*"]
    },
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "importHelpers": true,
    "lib": [
      "es2015"
    ],
    "types": [
      "node"
    ],
    "sourceMap": true
  },
  "include": [
    "./src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

package.json:

{
  "name": "api-with-overnightjs",
  "scripts": {
    "dev": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
    "deploy": "now --target production"
  },
  "dependencies": {
    "@overnightjs/core": "^1.4.7",
    "@overnightjs/jwt": "^1.1.2",
    "babel-plugin-import": "^1.11.0",
    "ejs": "^2.6.1",
    "express": "^4.16.4",
    "express-jwt": "^5.3.1",
    "firebase-admin": "^7.3.0",
    "typescript": "^3.4.4"
  },
  "devDependencies": {
    "@types/express": "^4.16.1",
    "@types/express-jwt": "^0.0.42",
    "@typescript-eslint/eslint-plugin": "^1.7.0",
    "@typescript-eslint/parser": "^1.7.0",
    "babel-eslint": "^10.0.1",
    "eslint": "^5.16.0",
    "eslint-config-standard": "^12.0.0",
    "eslint-plugin-import": "^2.17.2",
    "eslint-plugin-node": "^8.0.1",
    "eslint-plugin-promise": "^4.1.1",
    "eslint-plugin-security": "^1.4.0",
    "eslint-plugin-standard": "^4.0.0",
    "module-alias": "^2.2.0",
    "nodemon": "^1.18.11",
    "ts-node": "^8.1.0",
    "tsconfig-paths": "^3.8.0"
  }
}

非常感谢和感激!

【问题讨论】:

  • 你的问题是什么?
  • 如何在 typescript 中导入类?我错过了任何与打字稿相关的配置吗?
  • 确认一下-CompanyModel的文件名是company.ts?
  • 是的。我刚刚发现了问题,需要将 tsconfig-paths 添加到运行脚本中,以便注册自定义路径。仍然感谢反馈。 :)

标签: javascript node.js typescript express


【解决方案1】:

tsconfig-paths 添加到运行脚本后问题解决了:

"dev": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' -r tsconfig-paths/register src/index.ts"

【讨论】:

猜你喜欢
  • 2016-11-30
  • 2019-09-19
  • 2022-12-14
  • 1970-01-01
  • 2021-07-28
  • 2016-04-28
  • 2020-06-16
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多