我正在使用带有es6模块语法的typescript 1.6.
我的文件是:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
Run Code Online (Sandbox Code Playgroud)
main.ts:
import App from './test';
var a = new App.SomeClass();
Run Code Online (Sandbox Code Playgroud)
当我尝试编译该main.ts文件时,我收到此错误:
错误TS2306:文件'test.ts'不是模块.
我怎么能做到这一点?
以前我可以这样做:
import foo = require('foo');
Run Code Online (Sandbox Code Playgroud)
但是现在TypeScript(1.5)支持es6模块语法,在ES6模块语法中实现相同的正确方法是什么.
我已经安装了request-promise库并尝试在我的TypeScript应用程序中使用它,但没有太多运气.
如果我像这样使用它:
import {RequestPromise} from'request-promise';
RequestPromise('http://www.google.com')
.then(function (htmlString) {
// Process html...
})
.catch(function (err) {
// Crawling failed...
});
Run Code Online (Sandbox Code Playgroud)
我在TS编译输出上看到了这个:
error TS2304: Cannot find name 'RequestPromise'.
Run Code Online (Sandbox Code Playgroud)
如果我这样使用它:
import * as rp from'request-promise';
rp('http://www.google.com')
.then(function (htmlString) {
// Process html...
})
.catch(function (err) {
// Crawling failed...
});
Run Code Online (Sandbox Code Playgroud)
我看到一个错误,表示对象rp上没有'.then()'方法.
如何在TypeScript中正确使用它?
我一直没能找到一个带有Typescript教程的有价值的NodeJS,所以我在没有指导的情况下潜水,当然我有一个问题.
我不明白这两行之间的区别:
import * as http from 'http';
// and
import http = require('http');
Run Code Online (Sandbox Code Playgroud)
他们似乎以相同的方式运作,但我想他们的行为可能有一些细微差别,否则其中一个可能不存在.
我确实理解第一种方法可以让我有选择地从一个模块导入,但如果我导入所有模块,那么两者之间有区别吗?有首选方式吗?如果我从我自己的文件导入,这会改变什么呢?
在 ES6-ifying 一些 TypeScript 代码(我正在工作的项目在浏览器和 Node 服务器中运行,我想摇动浏览器包),我试图消除使用require并且只使用import. 但是当我这样做时...
import * as request from 'request';
然后调用request(),我在 Node 中得到运行时错误(在使用 babel 使代码 ES5 和 Node 兼容之后):
TypeError: request is not a function
另一方面,如果我这样做:
import request from 'request';
然后 TypeScript 编译器抱怨
error TS1192: Module '"<mypath>/node_modules/@types/request/index"' has no default export.
如果我手动更改已编译的 JS 代码以使用import request from 'request';它,它实际上工作正常......我如何强制 TS 编译器接受此代码并直接通过它?
import x = require('x')在es6中,这似乎是无效的语法,并且打字稿文档中没有明确的解释。