ts ES5 / ES3'teki bir zaman uyumsuz işlev veya yöntem 'Promise' yapıcısını gerektirir


108

Merhaba TypeScript Projemde async / await kullanıyorum, Ama bu günlüğü alıyorum:

[ts] ES5 / ES3'teki bir zaman uyumsuz işlev veya yöntem "Promise" yapıcısını gerektirir. "Promise" kurucusu için bir beyanınız olduğundan emin olun veya --libseçeneğinize "ES2015" i ekleyin .

Bunu Nasıl Çözebilirim?

Yanıtlar:


158

Hata mesajının dediği gibi, lib: es2015tsconfig.json dosyanıza ekleyin

// tsconfig.json
{
  "compilerOptions": {
    "lib": [ "es2015" ]
  }
}

GÜNCELLEME: Bu sizin için işe yaramazsa, şunu deneyin:

WebStorm gibi JetBrains IDE, varsayılan olarak kendi uygulamasını kullanır. Bunun yerine TypeScript dil hizmetini kullanacak şekilde yapılandırdığınızdan emin olun.

Visual Studio için proje dosyaları ve tsconfig.jsonbirbirini dışlar. Projenizi doğrudan yapılandırmanız gerekecek.

https://github.com/Microsoft/TypeScript/issues/3983#issuecomment-123861491


{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }bu benim tsconfig.json'um Nasıl Düzenlemeliyim?
Sedric Heidarizarei

Bunu Visual Studio 2017'de nerede belirtebilirim? Tsconfig.json içermez
Akash Kava

1
@katopz yaptım ama VS umursamıyor, csprojdosyanın bu tür şeyleri etkinleştirmek / devre dışı bırakmak için fazladan bazı xml öğeleri olduğunu buldum .
Akash Kava

3
Sonucu görmek için IDE'mi (WebStorm) yeniden başlatmam gerekti.
Coli

2
Ben dahil etmek zorunda "dom"içinde "lib"hem de dizi veya diğer hatalar olsun.
electrovir

22

Es6-promise için tür tanımlarını içeren bu paketi deneyin

npm install --save @types/es6-promise


2
"unional" yanlış değil, ama senin cevabın, benim yaşadığım sorunu çözen oldu. Teşekkürler!
tuliomarchetto

13

VS üzerindeyseniz, tsconfig.json dosyasını silin ve Çözüm Gezgini'nde projeye sağ tıklayın, ardından Genel olarak Özellikler-> TypeScript Oluşturma'ya tıklayın , aşağıdakileri değiştirin

  • ECMAScript sürümü: ECMAScript 6

  • Modül Sistemi: ES2015


@LukePighetti project-explorer
Ivandro Jao


1

Benim için hata, src/testsklasör içindeki test dosyalarımda oluştu . Kullandığım yana ts-nodetest etmek için .tsdosyaları doğrudan, ben hariç src/tests/*skinTenimde tsconfig.json. Satırı sildiğim anda hata gitmişti (sonuçta bu mantıklı).

Test dosyalarında başka birinin bununla mücadele etmesi durumunda.

DÜZENLEME: Elbette --lib, kabul edilen yanıtta ana hatlarıyla belirtildiği gibi seçeneğinizi doğru şekilde yapılandırmanız gerekir . Benim tsconfig.json --libseçeneğim şu şekilde çalışıyor:

"lib": [
    "es2018",
    "dom"
]

0

VS2019 tsconfig.json dosyasını tanımıyor gibi görünüyor, bu nedenle LIB seçenekleri uygulamayı değiştirmeyecek. Bu, ASYNC AWAIT'i kabul etmek için tipkript için PROMISE eklemenin bir yoludur.

export function AD(first: any, second: any, callBack: any)
{
    const rtn = async (dispatch: any): Promise<void> =>
    {
        await axios.post(TYPE.URI, { // provide a string of a URI to post into
            parm1: first,
            parm2: second
        })
            .then(data => // or you can use response instead of data as a name
            {
                console.log("data from call next");
                console.log(data);
                dispatch({ type: TYPES.AD, payload: data.data });
                if (callBack)
                {
                    callBack(data);
                }
            })
    }
    return rtn;

}

0

Sonunda çözmeyi başardım!
Terminaldeki komutum: yarn tsc main.ts && nodejs main.js Hata mesajım:

main.ts:1:16 - error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.

1 async function main() {
                 ~~~~


Found 2 errors.

error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Bunu çözmek için yaptığım şey tsconfig.json dosyasına başvurmaktı.
Tsconfig.json dosyam şu şekildeydi:

{
    "compilerOptions": {
        "target": "ESNext",
        "lib": [
            "ES2015",
            "DOM"
        ]
    }
}

Ve benim terminal yarn tsc -p ./tsconfig.json && nodejs main.js komutum şu şekildedir: Başka .ts dosyasını çalıştırmak istersem, şunu yapıyorum: yarn tsc -p ./tsconfig.json && nodejs file_name.js


-4

Bir Angular 4 projesinde VS2017 v15.8.2 ve Typescript 2.4.2 kullanıyorum (çözümümdeki bir sınıf kitaplığı projesi altında, bir typcript projesi değil). JavaScript dil hizmetini devre dışı bırakarak VS'deki hatayı / uyarıyı kaldırabildim :

Seçenekler => Metin Düzenleyici => JavaScript / TypeScript => Dil Hizmeti

VS'yi yeniden başlatın.

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.