2017-02-01 59 views
5

Mam projekt TypeScript z celem ES6, używa on funkcji core-js do funkcji polyfill ES2017, a tsconfig.json jest odpowiednio skonfigurowany.Object.entries() i Object.values ​​() nie są wpisywane jako tablice w WebStorm/PhpStorm

Gdy stosuje Object.entries(...) i Object.values(...) wyniki nie mają sposoby tablicy i właściwości (map, forEach, length itp), pojawiają się one jako zwykły obiektów IDE tak any[] typu powinny być odlewane wyraźnie:

Podczas gdy Object.keys(...) zachowuje się tak, jak powinien.

W tym samym czasie IDE w jakiś sposób "wie" o odpowiednich typach dla Object.entries i Object.values, są one pokazane zgodnie z Type30's lib.es2017.object.d.ts na Ctrl + Shift + P. Ale wydaje się ignorować typy dla kontroli, ponieważ nadrzędnym ObjectConstructor w bieżącym pliku rozwiązuje problem:

interface ObjectConstructor { 
    values(o: any): any[]; 
    entries(o: any): [string, any][]; 
} 

tsc wydaje się być w porządku z typowania, więc wygląda na to IDE konkretnego problemu.

Dzieje się tak tylko wtedy, gdy odznaczono Use TypeScript service w Languages & Frameworks > TypeScript. Wszystko jest normalne, gdy włączona jest usługa TypeScript (jest celowo wyłączana, ponieważ wcześniej występowały problemy z usługą TS).

Oto tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "allowSyntheticDefaultImports": true, 
    "alwaysStrict": true, 
    "strictNullChecks": false, 
    "baseUrl": "./src", 
    "paths": [], 
    "lib": [ 
     "es2016", 
     "es2017.object" 
    ] 
    }, 
    "exclude": [ 
    "node_modules" 
    ] 
} 

Co to oznacza? Czy moja konfiguracja poszła gdzieś źle?

Problem nadal występuje w języku TypeScript 2.1.5 i najnowszym IDE (EAP 2017.1).

+0

zdecydowanie zaktualizowano do najnowszego TypeScript. Wersja, której używasz, ma ponad rok. – PierreDuc

+0

Cóż, pytanie też ma rok. Problem zniknął dla mnie w pewnym momencie, ale nigdy nie doszedłem do wniosku, czy było to spowodowane aktualizacją TS lub IDE. – estus

+0

Niesamowite, to nauczy mnie nie czytać poprawnie. Cieszę się, że Twój problem został rozwiązany i mam nadzieję, że pewnego dnia znajdziesz odpowiedź na pytanie, co było nie tak. Do tego czasu jesteśmy w ciemności – PierreDuc

Odpowiedz

2

Typescript 2.3 introduced new support for iterators za kompilatora flagą --downlevel-iteration lub ustawiając .compilerOptions.downlevelIteration do true w tsconfig.json.

Należy zauważyć, że ta odpowiedź jest taka sama jak that one, ponieważ odnosi się do tej samej flagi kompilatora i podobnych symptomów, nawet jeśli odnosi się do problemów z kompilatorem, a ta dotyczy integracji niektórych elementów IDE.