如何在 typescript 中使用 es6-promises?
how to use es6-promises with typescript?
我阅读了 this SO question 但无法获得使用打字稿的承诺。希望我们能做出明确的指导。
这是一个 server/node 项目。我实际上使用的是最新的 iojs,但将 ES5 作为输出目标。
$ tsd query es6-promise --action install --save
$ npm install --save es6-promise
// typescript code:
/// <reference path="../../typings/es6-promise/es6-promise.d.ts"/>
var Promise = require("es6-promise").Promise;
require('es6-promise').polyfill();
function test():Promise {
var p:Promise = new Promise();
return p;
}
这是错误:
Cannot find name 'Promise'.
// 或者:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
//error=> Untyped function calls may not accept type arguments.
从您自己的节点服务器端代码 return Promise 的推荐方法是什么?
参考文献:
main.ts
import {Promise} from 'es6-promise';
const p: Promise<string> = new Promise (
(resolve: (str: string)=>void, reject: (str: string)=>void) => {
const a: string = "hello from Promise";
resolve(a);
}
);
p.then((st) => {
console.log(st);
});
tsconfig.json
{
"compilerOptions": {
"target": "es3",
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"noLib": false
},
"filesGlob": [
"./**/*.ts",
"!./node_modules/**/*.ts"
],
"files": [
"./main.ts",
"./typings/es6-promise/es6-promise.d.ts"
]
}
compileandrun.sh
#!/bin/sh
npm install es6-promise
tsd install es6-promise
tsc
node main.js
以下是在 v2.1.1+ 上,目标设置为 es5
通过安装 es6-promise
然后将其添加到文件顶部,我能够将 Promises 与 async/await
一起使用:
global.Promise = require('es6-promise').Promise;
而这 tsconfig.json
"lib": [ "es2015.promise", "es5" ],
使用 import { Promise }
表单对我不起作用,因为其他库正在崩溃(例如:axios)
将以下内容添加到 package.json
:
"dependencies": {
"es6-promise": "~4.1.0"
},
"devDependencies": {
"@types/es6-promise": "^0.0.32"
}
在您的 tsconfig.json
中将目标更改为 "es6"
"compilerOptions": {"target": "es6" }
或者安装TypeScript for Visual Studio 2015也可以不修改解决这个问题tsconfig.json
https://www.microsoft.com/en-us/download/details.aspx?id=48593
我需要为不同的框架(特别是 axios)填充它;我不需要实际创建自己的承诺,因此 none 这些解决方案对我有用。幸运的是,答案很简单,如果隐藏得好的话:
import { polyfill } from 'es6-promise'
polyfill();
您无需安装任何库即可使用 promises、async/await 以及其他新内容和目标 es5。只要确保你包含一个支持 promises 的 lib 版本,通常我使用 esnext - 你可以更加谨慎..
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["esnext", "dom"],
"strict": true,
"esModuleInterop": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": ".",
},
"include": ["src"]
}
瞧,还可以使用 promises 和 async await:
async function f(url:string){
const response = await fetch(url)
var data = await decodeOrThrow(await response.arrayBuffer())
}
我阅读了 this SO question 但无法获得使用打字稿的承诺。希望我们能做出明确的指导。 这是一个 server/node 项目。我实际上使用的是最新的 iojs,但将 ES5 作为输出目标。
$ tsd query es6-promise --action install --save
$ npm install --save es6-promise
// typescript code:
/// <reference path="../../typings/es6-promise/es6-promise.d.ts"/>
var Promise = require("es6-promise").Promise;
require('es6-promise').polyfill();
function test():Promise {
var p:Promise = new Promise();
return p;
}
这是错误:
Cannot find name 'Promise'.
// 或者:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
//error=> Untyped function calls may not accept type arguments.
从您自己的节点服务器端代码 return Promise 的推荐方法是什么?
参考文献:
main.ts
import {Promise} from 'es6-promise';
const p: Promise<string> = new Promise (
(resolve: (str: string)=>void, reject: (str: string)=>void) => {
const a: string = "hello from Promise";
resolve(a);
}
);
p.then((st) => {
console.log(st);
});
tsconfig.json
{
"compilerOptions": {
"target": "es3",
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"noLib": false
},
"filesGlob": [
"./**/*.ts",
"!./node_modules/**/*.ts"
],
"files": [
"./main.ts",
"./typings/es6-promise/es6-promise.d.ts"
]
}
compileandrun.sh
#!/bin/sh
npm install es6-promise
tsd install es6-promise
tsc
node main.js
以下是在 v2.1.1+ 上,目标设置为 es5
通过安装 es6-promise
然后将其添加到文件顶部,我能够将 Promises 与 async/await
一起使用:
global.Promise = require('es6-promise').Promise;
而这 tsconfig.json
"lib": [ "es2015.promise", "es5" ],
使用 import { Promise }
表单对我不起作用,因为其他库正在崩溃(例如:axios)
将以下内容添加到 package.json
:
"dependencies": {
"es6-promise": "~4.1.0"
},
"devDependencies": {
"@types/es6-promise": "^0.0.32"
}
在您的 tsconfig.json
中将目标更改为 "es6""compilerOptions": {"target": "es6" }
或者安装TypeScript for Visual Studio 2015也可以不修改解决这个问题tsconfig.json
https://www.microsoft.com/en-us/download/details.aspx?id=48593
我需要为不同的框架(特别是 axios)填充它;我不需要实际创建自己的承诺,因此 none 这些解决方案对我有用。幸运的是,答案很简单,如果隐藏得好的话:
import { polyfill } from 'es6-promise'
polyfill();
您无需安装任何库即可使用 promises、async/await 以及其他新内容和目标 es5。只要确保你包含一个支持 promises 的 lib 版本,通常我使用 esnext - 你可以更加谨慎..
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["esnext", "dom"],
"strict": true,
"esModuleInterop": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": ".",
},
"include": ["src"]
}
瞧,还可以使用 promises 和 async await:
async function f(url:string){
const response = await fetch(url)
var data = await decodeOrThrow(await response.arrayBuffer())
}