inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

객체 타입의 호환성

유니온타입의개념 및 프로퍼티 접근

59

gxpk0721

작성한 질문수 21

0

안녕하세요 덕분에 타입스크립트에 개념에 잡혀가고있는 와중에 제가 배운 개념을 정확하게 이해했는지가 궁금합니다.


1. 구조적 타이피이라는것은 구조가 같으면 서로 호환된다 즉 타입 이름이 달라도 같은 타입이라고 본다. (상하관계도 호환가능) 구조적으로 포함하고 있다면


2. 변수에 :타입 이렇게 적고 실제 에는 해당 타입보다 더 많은 속성을 넣고 그 추가적인 프로퍼티에 오류가 난다. 이유는 변수의 타입에 있는 속성으로만 접근이 가능하기때문이다.

(구조적 타이핑에 의하여 변수에 담을 순 있지만 값의 해당하는 프로퍼티에 접근하는건 변수의 타입 기준이기때문에 오류가난다. )
예시

image.png



typescript

답변 2

0

이정환 Winterlood

안녕하세요 gxpk0721님 이정환입니다.

1) 우선 "구조적 타이핑 = 구조가 같다면" 서로 호환된다 는 맞는 말 입니다. 말씀하신대로 두 타입의 이름이 서로 다르더라도 구조가 같다면 같은 타입으로 취급됩니다.

2) 강의 중 소개해드린 초과 프로퍼티 검사 관련된 내용이네요! 강의에서 말씀드린대로 초과 프로퍼티 검사는 위 사진 예시로 올려주신 것 처럼 변수에 객체 리터럴 값을 직접 할당하는 경우 발생하며, 타입에 정의된 프로퍼티만 존재하도록 강제합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. gxpk0721님.

타입스크립트에서 구조적 타이핑과 유니온 타입에 대한 개념을 잘 잡아가고 계신 것 같습니다. 질문에서 말씀하신 내용을 바탕으로 몇 가지 핵심 개념을 정리해 드리겠습니다.

  1. 구조적 타이핑 (Structural Typing): 타입스크립트는 구조적 타이핑 시스템을 사용하고 있기 때문에, 객체의 타입이 다른 객체의 타입을 포함하게 되면 두 객체는 같은 타입으로 간주됩니다. 즉, 변수에 할당되는 객체가 받아들이는 타입보다 더 많은 프로퍼티를 가질 수 있습니다. 이런 경우 프로퍼티 접근은 변수의 타입에 정의된 프로퍼티만 접근 가능하게 됩니다.

  2. 프로퍼티 접근 제한: 예를 들어, type Computer = { name: string; skills: string; }로 정의된 타입이 있을 때, computer 변수가 Computer 타입을 갖습니다. superComputer가 추가적인 프로퍼티인 superSkills를 가진다고 해도 computer에 할당될 수 있습니다. 그러나 computer.superSkills에 접근하면 오류가 발생합니다. 왜냐하면 computer 변수의 타입(Computer)에 superSkills가 정의되어 있지 않기 때문입니다.

  3. 타입 안정성: 타입스크립트는 변수에 할당된 값의 타입이 선언된 타입과 일치하는지를 검사하여 코드의 안전성을 보장합니다. 따라서 선언된 타입에 존재하지 않는 프로퍼티에 대한 접근은 컴파일 오류로 이어집니다.

귀하의 코드 예시에서 computer.superSkills에 접근하면 컴파일 오류가 발생할 것입니다. 또한, skils라는 프로퍼티가 Computer 타입에 존재하지 않으므로 이 부분도 동일하게 오류가 발생할 수 있습니다. “skills”로 수정이 필요합니다.

관련 질문에 대해 좀 더 자세히 알아보고자 하신다면, 유사한 질문을 다룬 게시물을 추천드립니다:
- 객체 타입의 호환성에 대한 이해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

핸드북 light/dark mode 관련 이슈가 있는 것 같습니다.

0

46

1

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

46

2

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

51

2

outDir 옵션 추가 후 컴파일 오류 질문

0

130

1

호출 시그니처 질문

0

87

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

96

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

81

1

할인쿠폰 관련하여

0

188

2

프론트엔드에서의 인터페이스활용

0

115

2

안녕하세요 이정환님!

0

103

1

Node.js 설치에 관한 질문입니다.

0

93

2

함수 타입 호출 시그니처

0

71

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

76

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

130

4

마우스 호버 시 정보

0

107

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

95

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

97

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

147

2

선생님.. 알고리즘도 강의해주시면안되나요

0

114

2

선생님은 어떻게 이런걸 아세요?

0

141

1

type: module

0

110

2

7:17초 업캐스팅 질문이있습니다!

0

88

1

슈퍼타입질문

1

78

2

프로젝트 설치

0

123

2