Promise'仅指类型,但在此处用作值

时间:2019-03-08 17:35:56

标签: typescript

尝试弄清楚异步内容在打字稿中是如何工作的,当我运行编译器时会产生此错误。这是我要编译的代码:

Printer.ts

export class Printer
{ 
    public static printString(string: string, callback): void
    {
        setTimeout(
            () => {
                console.log(string)
                callback()
            },
            Math.floor(Math.random() * 100) + 1
        )
    }

    public static printStringWithPromise(string: string): Promise<void>
    {
        return new Promise<void> ((resolve, reject) => {
            setTimeout(
                () => {
                    console.log(string)
                    resolve()
                },
                Math.floor(Math.random() * 100) + 1
            )
        })
    }
}

Main.ts

import { Printer } from './Printer';


class App
{
    public static run(): void
    {
        Printer.printStringWithPromise("A")
               .then(() => Printer.printStringWithPromise("B"))
               .then(() => Printer.printStringWithPromise("C"))
    }
}


App.run();

然后,我只运行tsc src/Main.ts --outDir out/,它向我抛出了上述错误。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

在您的tsconfig compiler options中,检查您的--target和/或--libPromise constructor仅适用于ES2015及更高版本。祝你好运!

答案 1 :(得分:0)

默认情况下,TypeScript在编译过程中仅包含es3库,但是promise只与es6aka es2015)一起提供。因此,您必须在es6数组中包含tsconfig.json#compilerOptions#lib-以下为最小示例。


tsconfig.json

{
  "compilerOptions": {
    "lib": ["es6"]
  },
  "files": ["index.ts"]
}

index.ts

const prom = new Promise(resolve => resolve('hello world'));

测试脚本

npm i typescript
tsc # <- should not throw any error