Próbuję utworzyć ciąg oddzielony przecinkami z obiektu,
const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const values = Object.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);
Jak to zrobić z TypeScript?
pobieranie pliku błędu:
severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'
typescript
object
user2280016
źródło
źródło
Object.values
w TS do rozwiązania błędu kompilacji OP. Aby to zrobić, po prostu potrzebujeszES2017
w swoim--lib
otoczeniu.ES2017
bibliotekę lib i musi zawierać bibliotekę polyfills, jeśli jej używasz. Daj inną odpowiedź przeciwko różnym ludziom.ES7/Object.values()
. Może myślisz, że to skomplikowane (nie zgadzam się), ale taka jest natura prób wykorzystania przyszłych funkcji, tak jakObject.values()
dzisiaj. Zawsze tak było. NawetObject.keys()
powinno być wypełnione w pełni, jeśli celujesz w ES3 lub chcesz obsługiwać IE8 (miejmy nadzieję, że już nie!). Ogólnie rzecz biorąc, dobrym pomysłem jest zrozumienie funkcji ES, obsługi przeglądarek i wypełniania polyfilling, jeśli tworzysz strony internetowe!Object.values()
jest częścią ES2017 , a błąd kompilacji, który otrzymujesz, wynika z konieczności skonfigurowania TS do korzystania z biblioteki ES2017. Prawdopodobnie używasz biblioteki ES6 lub ES5 w bieżącej konfiguracji TS.Rozwiązanie: użyj
es2017
lubes2017.object
w--lib
opcji kompilatora .Na przykład używając
tsconfig.json
:Należy pamiętać, że kierowanie ES2017 z maszynopis nie nie emitują polyfills w wyszukiwarce ES2017 (czyli powyższe rozwiązuje kompilacji błąd, ale nadal można napotkać w czasie wykonywania błąd, ponieważ przeglądarka nie implementuje ES2017
Object.values
), to do ciebie, aby PolyFill projekt zaprogramuj się, jeśli chcesz. A ponieważObject.values
nie jest jeszcze dobrze obsługiwany przez wszystkie przeglądarki (w momencie pisania tego tekstu), na pewno chcesz mieć wypełnienie:core-js
wykona zadanie .źródło
ES2017
na,es2017
ale AFAIK nie jest to konieczne, ale zawsze chcę się dowiedzieć, czy był powód zmiany?ES2017
,DOM
(wielka litera) jest wymieniony wtsc --init
komentarzu co prawidłowych wartości i działa poprawnie w kompilator, ale schemat JSON wymienia tylkoes2017
,dom
opcje (małe litery), więc JSON IDE / LINTER oznaczyES2017
,DOM
jak nieprawidłowe wartości (nawet jeśli są prawidłowe). Trochę zagmatwane.tsc --help
wyświetla jednak małe literyObject.values()
. Innymi słowy, możesz obejść błąd kompilacji, ale nadal napotykasz błędy czasu wykonania, jeśli uruchomisz przeglądarkę, która nie maObject.values()
.Możesz użyć
Object.values
w TypeScript, robiąc to,(<any>Object).values(data)
jeśli z jakiegoś powodu nie możesz zaktualizować do ES7 w tsconfig.źródło
if for some reason you can't update to ES7 in tsconfig
Zamiast
posługiwać się
W Twoim przypadku:
Spowoduje to ukrycie błędu kompilatora ts.
źródło
lib
ustawieniem, aby odzwierciedlić sposób jego używania, a nie celowo uciekać przed kompilatorem.lib
ustawienie służy tylko do uzyskania prawidłowego sprawdzania typu.Zwiększyłem cel w moim,
tsconfig.json
aby włączyć tę funkcję w TypeScriptźródło
Właśnie trafiłem na ten konkretny problem w Angular 6, używając interfejsu wiersza polecenia i obszarów roboczych do tworzenia biblioteki przy użyciu
ng g library foo
.W moim przypadku problem znajdował się
tsconfig.lib.json
w folderze biblioteki, którego nie maes2017
wlib
sekcji.Każdy, kto natknie się na ten problem w Angular 6, musi tylko upewnić się, że zaktualizowałeś siebie
tsconfig.lib.json
i swoją aplikacjętsconfig.json
źródło
Mając moją
tslint
konfigurację zasadami tutaj zawsze zastąpienie liniiObject["values"](myObject)
zObject.values(myObject)
.Dwie opcje, jeśli masz ten sam problem:
(Object as any).values(myObject)
lub
źródło
Object["values"]
?Najprostszym sposobem jest rzutowanie
Object
doany
, na przykład:I voila - brak błędów kompilacji;)
źródło
Jeszcze prostsze, użyj
_.values
z underscore.js https://underscorejs.org/#valuesźródło