인덱스 시그니처(Index signature)

태태·2023년 12월 6일
0

타입스크립트에서는 객체에 직접 문자열로 접근하는 것을 허용하지 않는다.
허용하려면 객체에 인덱스 시그니처를 추가해야 한다.

const array = ['banana','orange','pineApple'];

let obj = {
  apple: 0,
  banana: 0,
  orange: 0,
  pineApple: 0,
  pear: 0,
};

array.forEach(v => {
	obj[v] += 1 // 에러가 발생한다
});
/** 에러내용
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ apple: number; banana: number; orange: number; pineApple: number; pear: number; }'.
  No index signature with a parameter of type 'string' was found on type '{ apple: number; banana: number; orange: number; pineApple: number; pear: number; }'.
*/

Solution)

const array = ['banana','orange','pineApple'];

let obj:{ [key: string]: number } = {
  apple: 0,
  banana: 0,
  orange: 0,
  pineApple: 0,
  pear: 0,
};

array.forEach(v => {
	obj[v] += 1
});
또는
const array = ['banana','orange','pineApple'];

let obj: Record<string,number> = {
  apple: 0,
  banana: 0,
  orange: 0,
  pineApple: 0,
  pear: 0,
};

array.forEach(v => {
	obj[v] += 1
});
과 같이 사용할 수 있다, 안전한 사용을 보태려면 
const array = ['banana','orange','pineApple'];

let obj: Record<string,number> = {
  apple: 0,
  banana: 0,
  orange: 0,
  pineApple: 0,
  pear: 0,
};

array.forEach(v => {
  if(obj.hasOwnProperty(v)) obj[v] += 1 // 해당 구문 추가
});
profile
과정에서 재미를 느끼지 않는데 성공하는 일은 거의 없다

0개의 댓글