【问题标题】:Loading typescript external module without importing?加载打字稿外部模块而不导入?
【发布时间】:2014-07-16 19:08:56
【问题描述】:

我现在很头疼,因为我正在编写一个 nodejs 打字稿应用程序,它基本上是一个大的内部模块(分布在很多文件上并作为一个输出)。

现在我遇到的问题是express.d.ts(在确定类型上找到)被写入,因此它只能作为外部模块加载:import express = require("express"); 但是这意味着我必须将我的应用程序编译为单个文件当您将 import 关键字放入其中时,它会将其视为您的模块现在是外部的,这是我不想要的。

那么我有什么办法可以更改此代码:

/// <reference path="../../../typescript-descriptors/express/express.d.ts" />
import express = require('express');
var app = express();

app.get('/', (req: express.Request, res: express.Response) => {
    res.render('index');
});

所以它不需要导入,我可以只做var express = require("express"); 并且仍然获得类型安全?

因为我需要能够将我的 TS 逻辑拆分到多个文件中,并且使用导入方法不允许这样做。

【问题讨论】:

  • 几个cmets:1.TSD is now depricated。您应该迁移到Typings。 2.我建议在导入时使用from关键字:import * as express from "express";然后你可以在你的回调中使用req: express.Request

标签: node.js express typescript


【解决方案1】:

根据评论更新...

Express 本身就是 TypeScript 所称的外部模块。无法将外部模块导入内部模块 - 因此您实际上无法直接在此处实现您想要的。

但是,如果真正的根本问题是……

因为我需要能够将我的 TS 逻辑拆分到多个文件中,并且使用导入方法不允许这样做

是什么阻止了您简单地切换到外部模块,从而允许您将逻辑拆分为多个文件并根据需要导入它们?与其尝试将输出合并到一个文件中,不如依靠 Node 免费为您提供的简单模块加载,您就可以重新开始游戏了!

【讨论】:

  • require 似乎不是问题,因为 node.d.ts 参考似乎包括了(此处未包括)。我这样做的问题(我应该更清楚)是我有req: express.Request 它告诉我它找不到类型。我试过req: Express.Request,它告诉我 Request 缺少方法
  • 因为这一切都是通过构建脚本完成的,这意味着每个单独的文件都需要通过 TSC 编译,然后打包到某个地方,这将成为维护的噩梦。此外,我应该不需要更改我的整个架构来从 *.d.ts 文件中获取类型安全,它们在那里提供类型描述而不是强制模式或实践,因此为什么我只想使用类型描述在那里但不是它的模块加载范例,我目前使用内部模块比使用外部模块更有优势。
  • 真正阻止你公平的并不是类型定义——类型定义只是描述 Node 和 Express 的现实。不过,我理解你的沮丧。
  • 目前我无法使用类型定义,除非我将 typescript 模块加载为外部模块。当我这样做时,它需要将我的打字稿文件编译为外部模块。因此,似乎是类型定义阻止了我,对我而言,TS 没有理由需要了解更多信息,而不仅仅是描述 Express 类型的参考,这就是我想要它做的所有事情,就像我如何使用任何其他 d.ts 文件,但是如果不通过 TS(不是 JS)导入模块,我就无法使用此 d.ts 文件中的类型。
  • 为什么不写一个你想要的类型定义呢?
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2017-10-29
  • 2020-02-05
相关资源
最近更新 更多