2017-07-31 31 views
9

Bir ng2 uygulama üzerinde çalışıyorum. Bir nesneyi bir diziye dönüştürmek için şu işlev çağrısı kullanıyorum:Özellik 'girdileri', 'ObjectConstructor' türünde yok

var authors = Object.entries(responseObject.Authors); 

Bu, standart bir js işlevidir.

"Property 'entries' does not exist on type 'ObjectConstructor'" 

o çözüm compileroptions ES6 için ES5 gelen özelliği hedef değiştirmek olabileceğini düşünmemiz hızlı bir google dayanarak: Ancak, ts derleyici aşağıdaki hata verir.

"compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "module": "commonjs", 
    "noEmitOnError": true, 
    "noImplicitAny": false, 
    "outDir": "../Scripts/", 
    "removeComments": false, 
    "sourceMap": true, 
    "target": "es5", 
    "moduleResolution": "node", 
    "lib": [ 
     "es2015", 
     "dom" 
    ] 
    } 

Ben de hedef özelliğini değiştirerek çalıştı: Ancak, bir önceki soruna yönelik daha önceki bazı araştırma sonrasında, ben aşağıda benim tsconfig.json ek "lib" özelliği dahil ederek ES6 işlevselliği kaldıraç başardı düşündüm es2015 ve sonra projeyi yeniden inşa ve "typescriptUsingTsConfig" yürütüldü ama yine de aynı hatayı alıyorum. Object.entries() işlevinden yararlanmak için burada ne yapabilirim?

cevap

16

target'un yanlış bir şekilde değiştirilmesi yanlış bir yaklaşımdır ve lib'un değiştirilmesi doğru bir yaklaşımdır, ancak dilin yanlış sürümünü belirttiniz. ES2017 spesifikasyonuna According to MDN, Object.entries resmi olarak eklenmiştir. Bu nedenle, bunun yerine belirtmeniz gereken şey * bu nedenle . Eğer ES2017 eklendi Object fonksiyonun yöntemleri için sadece bildirimleri eklemek isterseniz

, typescript varsayılan olarak, Alexander Bird tarafından belirtildiği üzere a more granular value

"lib": ["es2017.object"] 

belirlemenizi sağlar , "lib" seçeneğinin örtük değeri, varsa "target" için belirtilen değere bağlıdır. Örneğin

: "lib" açıkça belirtilmediği sürece

"target": "es2017" 

buna "lib.*" öneki neden olur varsayılan olarak dahil edilecek.

Bunun daha eski çalışma zamanlarında çalıştığından emin olmak için muhtemelen uygulamanın kendisinin bir polfill'ini such as the this one ekleyeceğinizi unutmayın.

Not: Eğer typescript diline bilinen en son standart kütüphane özellikleri için bildirimleri içerecektir

"lib": ["esnext"] 

belirtebilirsiniz alternatif olarak. Hareketli bir hedefi temsil ettiğinden, bu seçenek dikkatli bir şekilde kullanılmalıdır çünkü ilgili çalışma zamanının tamamını doldurmak, araştırma gerektirecek ve hedef çalışma zamanınıza bağlı olarak farklı polifonilikleri yüklemeyi gerektiren karmaşık bir görevdir.

+0

teşekkürler aluan. Bu hile yapar. Bu ie10 + tarafından desteklenir? Bir polyfill – user8334943

+0

@ user8334943 eklemem gerekip gerekmediğini anlamaya çalışmaksızın, kesinlikle IE 10 için bir polifiliğe ihtiyacınız olacaktır.MDN bağlantısının alt kısmında tarayıcı desteği bilgileri vardır. –

+1

Başkaları için not: 'lib' derleyici seçeneğini zaten kullanmadıysanız, 'lib' ayarlandığında hedefinize göre varsayılan bir değer olabilir. Varsayılanlar listesi için [derleyici seçenekleri belgeleri] 'ne bakın (https://www.typescriptlang.org/docs/handbook/compiler-options.html). Hedefimin yanı sıra 'es2017.object' için varsayılan' lib' parametrelerini açıkça eklemeliydim. – alexanderbird

İlgili konular