我在node
中编写了一组typescript
辅助模块。我很难获得打字稿来解释外部节点模块的类型信息,例如" fs"和"路径"。
重要的是,我想将我的模块分成一堆Typescript文件,每个文件都有一个类/接口。他们的文件布局是这样的:
ts/ISomeInterface1.ts
ts/ISomeInterface2.ts
ts/SomeClass1.ts
ts/SomeClass2.ts
一个类实例化一个或多个接口,编写如下:
///<reference path="IFileSystemHelpers.ts" />
var fs = require("fs");
namespace myNmspace {
export class SomeClass1 implements SomeInterface1 {
public someIFunction() {
//do work
}
}
}
我使用gulp-typescript为NodeJ安装类型声明。我使用tsconfig.json
文件来构建和引用这些外部输入。这是一个片段:
{
"version": "1.8.9",
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
"preserveConstEnums": true,
"declaration": true,
"suppressImplicitAnyIndexErrors": true,
"out": "./outputfile.js"
},
"filesGlob": [
"./**/*.ts",
"!./node_modules/**/*.ts"
],
"files": [
"./typings/main.d.ts",
"./ts/ISomeInterface1.ts",
"./ts/ISomeInterface2.ts",
"./ts/SomeClass1.ts",
"./ts/SomeClass2.ts",
"./ts/exports.ts"
]
}
然后在exports.ts
文件中导出类:
declare var exports: any;
if (exports) {
exports.SomeClass1 = myNmspace.SomeClass1;
exports.SomeClass2 = myNmspace.SomeClass2;
}
然后是我的问题。如何获取&#34; fs&#34;的类型信息?模块?
我可以在node.d.ts
已安装typings
的{{1}}文件中看到以下内容:
declare module "fs" {
import * as stream from "stream";
import * as events from "events";
...
}
如何强制使用Typescript将fs
文件中的SomeClass1.ts
变量解释为强类型?换句话说,我在这里写什么:
var fs : ??? = require("fs");
有人可以帮忙吗?
顺便说一句,我注意到如果我用var
关键字替换import
,我会得到fs
变量的正确类型解释。然而,指向我的接口的术语中断了,我在implements ISomeInterface1
下得到了一条波浪线。更改模式以使用imports
会破坏我的文件分隔,并且只有在我想创建单文件节点模块时才有效。
答案 0 :(得分:1)
使用ES6样式导入
import * as fs from 'fs'
import * as path from 'path'
这也将导入定义文件中的定义。
语法var x = require('x')
不会(但是import x = require('x')
会这样做,以增加混淆)