💡 해당 포스트는 TypeScript Handbook 공식 문서를 기반으로 작성되었습니다.📌 인터페이스? 인터페이스는 Typescript 의 여러 객체를 정의하는 일종의 규칙이며 구조입니다. Show 6 키워드와 함께 정의하면 됩니다.
위와 같이 인터페이스의 요소를 모두 충족하면 문제 없이 컴파일 됩니다. 📌 옵셔널 속성만약 6 에 옵셔널한 속성을 부여하고 싶다면 8 를 사용하면 됩니다!다음 코드에서는 9 속성을 옵셔널로 지정하고 만약 주어지지 않았을 경우 0 를 할당했습니다.
📌 읽기 전용 속성경우에 따라서 6 의 각 속성을 처음 생성 이후 변경하지 못하도록 할 경우가 있습니다.이때는 2 속성을 정의하면 3 으로 만들 수 있습니다.
또한 4 를 사용하면 배열의 각 요소를 읽을 수만 있도록 지정할 수도 있습니다.
하지만 이 역시 객체 배열의 경우 객체 내부 속성까지 변경하는 것을 막지는 못합니다. 만약 객체 내부 속성을 변경하지 못하도록 하고 싶을 경우 2 속성을 활용합시다 😀
📌 함수 타입 6 는 일반적인 객체 뿐만 아니라 함수 타입도 다음과 같이 나타낼 수 있습니다.(사실 함수도 객체입니다.)
위 예제에서는 새롭게 정의된 함수의 인자 이름도 동일하게 했지만 실제로는 다르게 해도 상관 없습니다.
📌 색인 가능한 타입이전에 함수를 6 로 기술한 것과 같이 색인 가능한 타입을 나타내는 것도 가능합니다.예를 들어 배열에 접근할 때 8 과 같이 숫자형 값을 인덱스로 사용해서 해당하는 값에 접근합니다.
여기서 9 는 0 를 가지고 있다고 표현합니다. 0 는 어떤 타입의 인덱스로 접근했을 때 어떤 타입의 반환 값을 얻을 수 있는지 알려 줍니다. 0 에서 인덱스의 타입은 3 와 4 만 사용할 수 있습니다.
또한 3 타입과 4 타입 둘 다 명시 할 수는 있지만반드시 3 타입으로 접근해서 반환되는 결과의 타입은 4 타입으로 접근해서 얻는 결과의 하위 타입 이어야 합니다. (할당 가능해야 합니다)
따라서 다음과 같은 코드는 오류가 발생합니다.
이를 고치면 다음과 같이 됩니다.
💡 왜 number 타입 인덱스 결과가 `string` 타입 인덱스 결과의 하위 타입 이어야 할까? 9 를 사용하면 한 가지 더 재미있는 사실이 있습니다.이는 바로 해당 6 의 반환 타입을 강제할 수 있다는 것입니다. 0이는 객체의 속성에 접근할 때 1 뿐만 아니라 2 과 같이 접근할 수 있기 때문에 9 를 지정한 경우 모든 속성의 반환 타입이 동일하게 설정됩니다.
또한 2 속성을 함께 사용하면 이전에 사용한 5 를 구현할 수 있습니다. 1📌 클래스 타입아마 대부분의 다른 객체 지향 언어에서 6 의 가장 많은 쓰임새는클래스가 특정 메서드를 모두 구현 했는지 검사하는 용도 일 것입니다. 2대부분 6 는 클래스의 8 메서드를 표현합니다.이는 다른 개발자가 6 를 통해 0 정보에 접근할 수 없도록 하기 위함입니다.📌 인터페이스 확장하기 6 는 다른 6 를 확장해서 사용할 수 있습니다.이를 통해 중복된 속성을 보다 유연하게 관리할 수 있습니다. 3 3 의 경우 다중 상속을 지원하지 않지만 6 는 다중 상속을 지원합니다. 4📌 클래스를 확장한 인터페이스 6 는 클래스 상속 시 0 와 같이 보호되는 맴버 속성도 함께 상속 받습니다.이때 해당 클래스 맴버의 실제 구현부는 제외하고 6 와 같이 상속 받습니다. 5위 예제에서 8 과 9 의 경우 각각 0 을 상속받고 있습니다.이때 8 의 경우 2 이라는 6 를 구현하고 있는데, 2 이 0 이라는 클래스를 확장하면서 0 맴버인 7 까지 요구하고 있는 상황입니다.
마지막에 8 에서 에러가 발생하는 이유가 바로 여기에 있습니다.자체적으로 동일한 이름을 가지는 0 맴버를 생성했지만이는 0 클래스의 0 맴버와는 별도의 맴버입니다.따라서 0 클래스를 확장해줘야 올바르게 사용할 수 있습니다.반응형 공유하기 게시글 관리 구독하기owen.dev.log 🌳'🎨 Frontend > TypeScript' 카테고리의 다른 글[TypeScript] 리터럴 타입(Literal Types) (0)2022.02.20[TypeScript] 함수(Functions) (0)2022.02.20[TypeScript] 기본 타입 (Basic Types) (0)2022.02.20[Effective TypeScript 정리] CH6. 타입 선언과 @types (0)2022.02.20[Effective TypeScript 정리] CH5. any 타입 다루기 (0)2022.02.20 |