타입스크립트에서는 객체에 직접 문자열로 접근하는 것을 허용하지 않는다.
허용하려면 객체에 인덱스 시그니처를 추가해야 한다.
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; }'.
*/
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 // 해당 구문 추가
});