今天在看typescript 导入模块的时候,看到这么一个导入法:
import * as express from 'express'
文中提到了如下的问题
最后一行export = express,并且上面分别定义了一个 function express() 和namespace express,这种写法是比较特殊的,我一时也没法解释清楚,反正多参照 DefinitelyTyped 上其他模块的写法即可。这个问题归根结底是 express 模块通过 import * as express from ‘express’ 引入的时候,express本身又是一个函数,这种写法在早期的 Node.js 版本的程序和 NPM 模块中是比较流行的。
这个应该只和声明有关
然后就看到这篇文章,里面提到了用 tsc 编译成 commonjs
1 | ; |
然后我自己试了一下在target为es5的情况下确实是编译成了如下js:1
2
3
4
5
6
7
8var express = require("express");
var app = express();
app.get('/', function (req, res) {
res.end('hello, world');
});
app.listen(3000, function () {
console.log('server is listening');
});
文中还提到了如何编写声明文件,然后我看了下express的声明文件:
确实是像如下
1 | declare function e(): core.Express; |
发现express可以定义Router,和内部的RouterOptions
参考资料Express 4.x API 中文手册