无法导入 typescript 模型,属性 不会因类型 typeof 和引用错误而退出
Unable to import typescript models, Property does not exit on type typeof and reference errors
我正在尝试使用 NodeJS、Hapi 和打字稿创建微服务。我有一个基本路由设置 是 工作,但我无法使用我想要的目录结构创建和导入我的服务。该结构基本上是:
/server.ts
/tsconfig.json
/packages.json
/Services/
/CarService.ts
/BoatService.ts
/Models
/Car.ts
/Boat.ts
/Tests
/Bundle
我正在尝试将我的模型与我的业务逻辑分开。我的一项服务如下所示:
module Services {
export class CarService {
saveCar(data: any): boolean {
return false;
}
}
}
但也看起来像这样:
class CarService {
saveCar(data: any): boolean {
return false;
}
}
export {CarService}
我一直在尝试将此服务导入我的 server.ts
import CarService = Services.CarService;
let _carService = new CarService();
但是当我为第二个版本 carService
时它看起来像这样
import * as _carService from './Services/CarService';
我正尝试像这样使用 servcie:
server.route({
method: 'POST',
path: '/Cars/',
handler: function (request:any, reply) {
_carService.saveCar(request.payload); // the error is here
//_carService["saveCar"](request);
reply("we did it!");
}
});
第一种方法给我这个错误:
Property 'saveCar' does not exist on type 'typeof CarService'.
第二种方法在可视代码中编译,但给我这个错误:
ReferenceError: CarService is not defined
我的 tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "bundle",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"declaration": true
},
"filesGlob": [
"./**/*/.ts"
]
}
很明显我的模块编译不正确。不知道错误是和tsconfig模块解析策略有关,还是和输出目录有关。我也摆弄过这些设置。我通过阅读文档知道模块解析策略首先在 /src/
文件夹中查找,但有一次我有一个我认为的 rootDirs' array in my tsconfig.json that pointed to my
/Models/and
/Services/` 目录会解决这个问题。
您可以在CarService.ts
中使用export default
,然后在server.ts
中导入class:
// Services/CarService.ts
export default class CarService {
saveCar(data: any): boolean {
return false;
}
}
// server.ts
import CarService from './Services/CarService';
let _carService = new CarService();
另请参阅:
- 来自 Mozilla 的文章 ES6 In Depth: Modules;
我正在尝试使用 NodeJS、Hapi 和打字稿创建微服务。我有一个基本路由设置 是 工作,但我无法使用我想要的目录结构创建和导入我的服务。该结构基本上是:
/server.ts
/tsconfig.json
/packages.json
/Services/
/CarService.ts
/BoatService.ts
/Models
/Car.ts
/Boat.ts
/Tests
/Bundle
我正在尝试将我的模型与我的业务逻辑分开。我的一项服务如下所示:
module Services {
export class CarService {
saveCar(data: any): boolean {
return false;
}
}
}
但也看起来像这样:
class CarService {
saveCar(data: any): boolean {
return false;
}
}
export {CarService}
我一直在尝试将此服务导入我的 server.ts
import CarService = Services.CarService;
let _carService = new CarService();
但是当我为第二个版本 carService
import * as _carService from './Services/CarService';
我正尝试像这样使用 servcie:
server.route({
method: 'POST',
path: '/Cars/',
handler: function (request:any, reply) {
_carService.saveCar(request.payload); // the error is here
//_carService["saveCar"](request);
reply("we did it!");
}
});
第一种方法给我这个错误:
Property 'saveCar' does not exist on type 'typeof CarService'.
第二种方法在可视代码中编译,但给我这个错误:
ReferenceError: CarService is not defined
我的 tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "bundle",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"declaration": true
},
"filesGlob": [
"./**/*/.ts"
]
}
很明显我的模块编译不正确。不知道错误是和tsconfig模块解析策略有关,还是和输出目录有关。我也摆弄过这些设置。我通过阅读文档知道模块解析策略首先在 /src/
文件夹中查找,但有一次我有一个我认为的 rootDirs' array in my tsconfig.json that pointed to my
/Models/and
/Services/` 目录会解决这个问题。
您可以在CarService.ts
中使用export default
,然后在server.ts
中导入class:
// Services/CarService.ts
export default class CarService {
saveCar(data: any): boolean {
return false;
}
}
// server.ts
import CarService from './Services/CarService';
let _carService = new CarService();
另请参阅:
- 来自 Mozilla 的文章 ES6 In Depth: Modules;