IT story

Typescript와 함께 Object.values를 사용하는 방법은 무엇입니까?

hot-time 2020. 7. 18. 10:02
반응형

Typescript와 함께 Object.values를 사용하는 방법은 무엇입니까?


쉼표로 구분 된 문자열을 객체에서 형성하려고합니다.

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);

TypeScript로이 작업을 수행하는 방법은 무엇입니까?

오류 파일 받기 :

severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'

대신 Object.keys를 사용하십시오.

const data = {
  a: "first",
  b: "second",
};

const values = Object.keys(data).map(key => data[key]);

const commaJoinedValues = values.join(",");
console.log(commaJoinedValues);

Object.values()ES2017의 일부이며 ES2017 라이브러리를 사용하도록 TS를 구성해야하기 때문에 컴파일 오류가 발생합니다. 현재 TS 구성에서 ES6 또는 ES5 라이브러리를 사용 중일 수 있습니다.

솔루션 : es2017또는 컴파일러 옵션을 사용 es2017.object하십시오 .--lib

예를 들어, 사용 tsconfig.json:

"compilerOptions": {
    "lib": ["es2017", "dom"]
}

TypeScript로 ES2017을 타겟팅하면 ES2017 의 브라우저에서 폴리 필이 생성 되지 않습니다 (위의 방법으로 컴파일 오류가 해결 되지만 브라우저가 ES2017을 구현하지 않기 때문에 여전히 런타임 오류 가 발생할 수 있음 Object.values), 프로젝트를 폴리 필해야합니다 원하는 경우 직접 코드를 작성하십시오. 그리고이 글을 쓰는 시점에서 Object.values모든 브라우저가 아직 잘 지원하지 않기 때문에 polyfill을 원합니다 : core-jswill do the job .


어떤 이유로 tsconfig에서 ES7로 업데이트 할 수없는 경우 Object.valuesTypeScript에서이를 수행 하여 사용할 수 있습니다 (<any>Object).values(data).


대신에

Object.values(myObject);

사용하다

Object["values"](myObject);

귀하의 예의 경우 :

const values = Object["values"](data).map(x => x.substr(0, x.length - 4));

이것은 ts 컴파일러 오류를 숨길 것입니다.


tsconfig.jsonTypeScript에서이 기능을 사용하도록 대상을 증가 시켰습니다.

{
    "compilerOptions": {
        "target": "es2017",
        ......
    }
}

CLI와 작업 공간을 사용하여 Angular 6 에서이 정확한 문제에 부딪 쳤습니다 ng g library foo.

필자의 경우 문제는 섹션에 포함 tsconfig.lib.json되지 않은 라이브러리 폴더 es2017lib있습니다.

Angular 6 에서이 문제를 겪고있는 사람 tsconfig.lib.json은 응용 프로그램뿐만 아니라 사용자를 업데이트 해야합니다.tsconfig.json


나의 갖는 tslint항상 라인을 대체 여기 규칙 구성을 Object["values"](myObject)함께 Object.values(myObject).

동일한 문제가있는 경우 두 가지 옵션 :

(Object as any).values(myObject)

또는

/*tslint:disable:no-string-literal*/
`Object["values"](myObject)`

더 간단 _.values하고 underscore.js 에서 사용 https://underscorejs.org/#values


가장 간단한 방법은 다음과 같이 Objectto 를 캐스팅하는 any것입니다.

const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const obj = <any>Object;
const values = obj.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);

And voila – no compilation errors ;)

참고URL : https://stackoverflow.com/questions/42966362/how-to-use-object-values-with-typescript

반응형