일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 스마트컨트렉트 함수이름 중복 호출
- 스마트컨트렉트프록시
- ethers typescript
- ethers type
- chainlink 설명
- 프록시배포구조
- rust 기초
- 러스트 기초
- nest.js설명
- 머신러닝기초
- 컨트렉트 동일한 함수이름 호출
- ambiguous function description
- 컨트렉트 배포 자동화
- multicall
- Vue.js
- 러스트 기초 학습
- ethers
- ethers v6
- Vue
- ethers websocket
- 스마트 컨트렉트 함수이름 중복
- 스마트컨트렉트 예약어 함수이름 중복
- SBT표준
- 티스토리챌린지
- 러스트기초
- vue기초
- 스마트컨트렉트테스트
- 오블완
- 체인의정석
- git rebase
Archives
- Today
- Total
체인의정석
typescript에서 enum에 string을 인덱스로 썼을 때 발생하는 문제 해결 본문
728x90
반응형
// bad
const _getKeyValue = (key: string) => (obj: object) => obj[key];
// better
const _getKeyValue_ = (key: string) => (obj: Record<string, any>) => obj[key];
// best
const getKeyValue = <T extends object, U extends keyof T>(key: U) => (obj: T) =>
obj[key];
Bad - the reason for the error is the object type is just an empty object by default. Therefore it isn't possible to use a string type to index {}.
Better - the reason the error disappears is because now we are telling the compiler the obj argument will be a collection of string/value (string/any) pairs. However, we are using the any type, so we can do better.
Best - T extends empty object. U extends the keys of T. Therefore U will always exist on T, therefore it can be used as a look up value.
https://www.angularjswiki.com/angular/how-to-convert-a-string-to-enum-in-typescript-or-angular/
다음 글을 참고하여 해결하였다.
원래 코드
// Change string to LegalPersonNameTypeCode
export function toLegalPersonNameTypeCode(legalPersonNameIdentifierType: string) {
if (LegalPersonNameTypeCode[legalPersonNameIdentifierType]) {
return LegalPersonNameTypeCode[legalPersonNameIdentifierType];
}
throw new Error(`${legalPersonNameIdentifierType} must be one of 'LEGL','SHRT', 'TRAD' `);
}
수정한 코드
// Change string to LegalPersonNameTypeCode
export function toLegalPersonNameTypeCode(legalPersonNameIdentifierTypeParam: string) {
const legalPersonNameIdentifierType: LegalPersonNameTypeCode = (<any>legalPersonNameIdentifierTypeParam)[
legalPersonNameIdentifierTypeParam
];
if (legalPersonNameIdentifierType) {
return legalPersonNameIdentifierType;
}
throw new Error(`${legalPersonNameIdentifierType} must be one of 'LEGL','SHRT', 'TRAD' `);
}
타입을 단순하게 string으로만 지정해 주는 것이 아니라 더 자세히 지정해 주어야 오류가 나지 않는다.
728x90
반응형
'개발' 카테고리의 다른 글
git cli 주요 명령어 정리 (0) | 2021.07.26 |
---|---|
typescript 커스텀 모듈 만들 시 발생가능한 에러사항 (0) | 2021.07.22 |
package.json의 dependency 살펴보기 (0) | 2021.07.22 |
jest.config - mouduleNameMapper @ 경로 인식 에러 해결하기 (0) | 2021.07.22 |
ts config.json (0) | 2021.07.22 |
Comments