【发布时间】: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