토이 프로젝트에서 사용자 목록을 관리하는 배열을 만들고, 새로운 사용자 객체를 push 하려고 합니다.
코드:
interface User {
id: number;
name: string;
}
const users: User[] = [];
const newUser = {
id: 1,
name: "Kim",
age: 25
};
users.push(newUser);
오류: Argument of type '{ id: number; name: string; age: number; }' is not assignable to parameter of type 'User'. Object literal may only specify known properties, and 'age' does not exist in type 'User'.
시도: User 인터페이스에 age를 추가하지 않고 newUser 객체에서 age 속성을 제거해 보았으나, 동적으로 생성되는 데이터라 속성 제거가 어렵습니다.
질문: 인터페이스에 정의되지 않은 추가 속성이 포함된 객체를 User 배열에 추가하려면 어떻게 타입을 지정해야 합니까?
댓글9
-
빗방울
2026.10.31 00:49
-
빗방울
2026.10.31 02:16
맞음ㅋㅋ 근데 any 쓰면 타입 체크 의미 없으니까
웬만하면 any 대신 unknown 쓰는 게 나을듯함
-
빗방울
2026.10.31 02:30
오 이거 꿀팁이네요ㅋㅋ
근데 any보다는 좀 더 좁게 잡는 게 안전할듯함
-
빗방울
2026.10.31 02:53
아 이거지ㅋㅋ
근데 any보다는
any 대신 unknown이나 string 같은 걸로 좁혀서 쓰면 더 깔끔할듯함
-
빗방울
2026.10.31 04:12
오 이거 정석이네요ㅋㅋ 인덱스 시그니처 쓰면 웬만한 건 다 해결될듯함ㅋㅋ
-
빗방울
2026.10.31 03:46
그냥 타입 단언 써서 as User로 밀어넣는 게 제일 편할듯함ㅋㅋ
귀찮으면 그냥 그렇게 처리하세요ㄷㄷ
-
빗방울
2026.10.31 06:17
ㄹㅇㅋㅋ 걍 as User 박는 게 정신건강에 이롭긴 함ㄷㄷ
급할 땐 그게 짱인듯ㅋㅋ
-
빗방울
2026.10.31 05:59
제네릭 써서 확장 가능하게 만드는 방법도 있을 듯함ㅋㅋ
그게 나중에 관리하기 더 편할 것 같은데 한번 찾아보세요ㄷㄷ
-
빗방울
2026.10.31 07:21
아니면 그냥 interface 말고 type으로 정의해서 교집합이나 유니온 써보는 건 어떰ㅋㅋ
데이터 구조 계속 바뀔 거면 그게 더 유연할 것 같음ㄷㄷ
한번 시도해보셈ㅋㅋ
모든 이야기1511
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
인덱스 시그니처 쓰면 될듯함
interface User {
[key: string]: any;
id: number;
name: string;
}
이렇게 하면 추가 속성 있어도 통과될걸요ㅋㅋ