사이드 프로젝트에서 API 응답 데이터에 클라이언트 사이드에서 사용할 상태 값을 추가하려고 합니다.
코드:
interface User {
id: number;
name: string;
}
const user: User = {
id: 1,
name: "Kim"
};
user.isLoggedIn = true;
오류: Property 'isLoggedIn' does not exist on type 'User'.
시도: `isLoggedIn` 속성을 인터페이스에 추가하지 않고 객체에 직접 할당 시도.
질문: 기존 인터페이스 타입을 유지하면서 특정 객체에만 동적으로 속성을 추가하려면 어떻게 타입을 정의해야 합니까?
댓글12
-
빗방울
2026.10.31 02:54
-
빗방울
2026.10.31 03:29
ㄹㅇ 빡빡해서 가끔 현타 옴 ㅋㅋ
그냥 타입 단언 써서 as any 때리는 게 정신건강에 좋을지도 모름
-
빗방울
2026.10.31 03:38
인터페이스 확장해서 새로운 타입 만드는 건 어떰?
User extends 해서 상태값 추가한 타입 따로 파는 게 나중에도 안 꼬이고 편할 듯함ㅋㅋ
-
빗방울
2026.10.31 04:27
그게 정석이긴 하죠ㅋㅋ intersection type으로 User & { isLoggedIn: boolean } 이렇게 쓰는 것도 방법일 듯함
-
빗방울
2026.10.31 05:03
그냥 처음부터 partial로 선언하고 시작하는 건 어때요? 나중에 값 채워넣기 편해서 전 그렇게 쓰는데 한번 알아보셈ㅋㅋ
-
빗방울
2026.10.31 06:16
그냥 map 함수 돌릴 때 리턴 타입 새로 지정해서 새 객체로 만들어버리는 건 어때요? 원본 건드리는 것보다 그게 훨씬 깔끔할 듯함ㅋㅋ
-
빗방울
2026.10.31 06:23
맞음ㅋㅋ 불변성 유지하는 게 나중에 디버깅할 때 훨씬 편하긴 하겠네요
스프레드 연산자로 새로 만드는 게 제일 깔끔할 듯함
-
빗방울
2026.10.31 08:52
ㄹㅇ 그게 젤 깔끔하긴 하죠ㅋㅋ 맵 돌리면서 타입 새로 지정해주면 나중에 유지보수할 때도 덜 헷갈릴 듯함ㅋㅋ
-
빗방울
2026.10.31 08:06
근본적으로는 그냥 User 인터페이스에 옵셔널로 isLoggedIn?: boolean 넣어두는 게 제일 편하지 않을까요ㅋㅋ 굳이 타입 새로 만들기 귀찮을 때 쓰기 좋음ㅋㅋ
-
빗방울
2026.10.31 08:09
아니면 그냥 `User` 타입 대신에 `any`나 `unknown`으로 받았다가 타입 가드로 좁혀서 쓰는 방법도 있을 것 같은데 이건 너무 돌아가는 건가ㅋㅋ
-
빗방울
2026.10.31 08:18
아니면 그냥 클래스로 만들어서 getter/setter 쓰는 건 어때요ㅋㅋ
상태 관리까지 생각하면 그게 더 체계적일 것 같긴 한데 좀 오버인가ㅋㅋ
-
빗방울
2026.10.31 09:30
아니면 그냥 Mapped Types 써서 기존 User 타입 기반으로
새 속성 추가한 유틸리티 타입 하나 만들어두는 건 어떠신지ㅋㅋ
그게 나중에 재사용하기엔 제일 편할 것 같네요ㄷㄷ
모든 이야기1511
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
인덱스 시그니처 쓰면 해결될 듯함.
아니면 그냥 `Record`로 감싸보셈.
타입스크립트 원래 이런 거 빡빡해서 짜증나네요 ㅋㅋ