Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3장] 타입의 모든 것 #3

Open
dahye1013 opened this issue Jul 12, 2022 · 6 comments
Open

[3장] 타입의 모든 것 #3

dahye1013 opened this issue Jul 12, 2022 · 6 comments

Comments

@dahye1013
Copy link
Member

[3장 퀴즈]

타입스크립트: 타입의 모든것

아래 마크다운을 복사 붙여넣기해서 코멘트로 퀴즈를 달아주세요 :)
객관식, 주관식에 상관없이 편하게 만들어주세요!

부가 설명을 달고 싶다면, 해설을 정답과 함께 옵션으로 작성하시면 됩니다. ☺️

예시

퀴즈 내용 객관식의 정답을 골라보세요!
(퀴즈 내용)
1. 1번 
2. 2번
3. 3번

<details>
	<summary>퀴즈 정답</summary>
	<div markdown="1">    
	정답은 1번!
	</div>
</details>
@dahye1013 dahye1013 added the QUIZ label Jul 12, 2022
@dahye1013 dahye1013 changed the title [3장 퀴즈] [3장] 타입의 모든 것 Jul 12, 2022
@dahye1013 dahye1013 added the 3장 label Jul 12, 2022
@seojihwan
Copy link
Contributor

tsconfig의 preserveConstEnums옵션이 true일때 다음 타입스크립트 코드의 컴파일 결과는?
image

"use strict";
var Language;
(function (Language) {
  Language["English"] = "English";
  Language["Spanish"] = "Spanish";
})(Language || (Language = {}));
const english = "English" /* Language.English */;
"use strict";
const english = "English" /* Language.English */;
정답
정답: 1번 const enum은 자바스크립트 코드를 생성하지않고, 사용하는 곳에 값을 채워넣는다. preserveConstEnums옵션을 사용하면, 런타임 코드 생성이 활성화 된다. (�근데 컴파일 이후, enum값 갱신될일이 없을것 같은데 책에서 버전에 따라 enum이 다른 값을 가질 수 있다는 부분은 예시를 못찾아서 이해가안되네요. 50p)

@InSeong-So
Copy link
Member

InSeong-So commented Jul 18, 2022

enum이 다른 값을 가질 수 있다는 부분에 대해서 명확히 어딜 이야기하는 것인지 나와있진 않네요...🥲

다만 저 "값"이 "메모리의 참조 주소"를 일컫는 말이라면 타입스크립트의 enum이 컴파일 시 자바스크립트 객체로 변환되기 때문에 해당 예시가 될 수 있을 것 같네요.

// 요게
enum SupportedLanguages {
  en = 'English',
  fr = 'français',
  es = 'Español'
}

// 요렇게
Object { en: "English", fr: "français", es: "Español" }

혹은 타입스크립트 버전이 올라감에 따라 enum이 가지고 있던 문제(예: 인덱스 동적 할당 등)들이 수정되거나, 룰이 추가되므로 "다른 값을 가질 수도 있다"고 표현한 것일 수 있습니다.

@jlee0505
Copy link
Member

jlee0505 commented Jul 18, 2022

퀴즈 내용 정답을 세 줄이내로 요약 설명해보세요.
1. any 와 unknown 의 차이?

2. 객체에 타입 주기
2-1. 객체에 타입을 할당하는 4가지 방법:
2-2. 이중 지양해야할 방법과 그 이유는?:
2-3. 객체 리터럴 표기법과 object 타입 방법의 차이는?
2-4. 프로퍼티가 있을 수도 있고 없을 수 도 있을 때 사용하는 표기법 2가지:
2-5. 프로퍼티 키가 여러가지 일 수 있을 때 사용하는 방법:

3. 타입 리터럴
3-1. 타입 리터럴이 무엇인가요? 타입 리터럴의 개념을 설명하고 개념을 이용해 아래 a,A의 타입을 추론해보세요.

const a = 27;
let A = 27;

console.log(typeof(a));
console.log(typeof(A));

3-2. 아래 객체 리터럴 문법의 결과를 추론해보세요

const a:{b:number} = {
 b: 27
}

console.log(typeof(a.b));
퀴즈 정답
1. any 는 타입을 무시하고 unknown 은 모든 타입을 고려합니다. any 를 사용하면 타입 검사를 실행하지 않지만unknown 은 모든 타입을 고려하여 검사합니다. 타입을 모를 때 any 사용을 피하고 unknown 을 사용해야 하는 이유입니다.

2-1. 1) 객체 리터럴 표기법 2) 빈 객체 리터럴 표기법 3) object 타입 4) Object 타입<br/>
2-2. 2,4번<br/>
    2-3. 객체 리터럴 표기법({a:string})은 객체가 어떤 필드를 포함할 수 있는지 알고 있거나 객체의 모든 값이 같은 타입을 가질 때 사용한다. 반면 object 타입({a:object})는 어떤 필드를 포함하는지 관심없고 그 객체 자체만 필요할 때 사용된다.<br/>
    2-4. 있을 수 도 없고 없을 수 도 있는 프로퍼티의 타입을 주기 위해서는 선택자형({a?:string}) 또는 readonly 한정자({readonly a:string}) 을 줄 수 있다. <br/>
    2-5. 프로퍼티가 확실히 있으나 여러개의 키값을 가질 때는 인덱스 시그니처 타입을 줄 수 있다.({[a:string]})<br/>

3-1. A 의 타입: number / a의 타입: 27
const 로 선언한 변수는 그 값이 변하지 않을 것이라는 것을 타입스크립트가 인식하여 변수가 가질 수 있는 가장좁은 타입으로 추론합니다.
3-2. number
객체는 const 로 선언해도 더 좁은 타입으로 추론하지 않습니다.

@dahye1013
Copy link
Member Author

부재 타입의 차이 알아보기

no 타입 의미
(1) null 값이 없음
(2) undefined 값을 변수에 할당하지 않았음.
(3) void 절대 반환하지 않는 함수
(4) never return 문을 포함하지 않는 함수

다음 중 타입과 의미의 배치가 잘못 된 것은?

퀴즈 정답
(3),(4) 번 의미가 바뀌어야 합니다. `void`는 return 문을 포함하지 않는 함수이고, `never`은 절대 반환하지 않는 함수입니다.
  • (1) null 은 값이 없다는 의미로 값을 계산하려하면 에러가 발생합니다.
  • (2) undefined는 아직 정의하지 않았음을 의미합니다.
  • (3) void 는 명시적으로 아무것도 반환하지 않는 타입 (예. console.log)입니다.
  • (4) never은 절대 반환하지 않는 함수로 예외를 던지거나 영원히 실행되는 함수입니다.

@yeomgahui
Copy link
Contributor

튜플에 대한 설명으로 옳지 않은것은?

  1. 배열의 서브타입이며 길이가 고정되어있다.
  2. 각 인덱스의 타입이 알려진 배열의 일종이다.
  3. 자바스크립트에서 배열과 튜플에 같은 문법을 사용하는데, 타입스크립트에서는 대괄호를 배열 타입으로 추론하기 때문이다.
  4. 튜플은 선택형 요소를 지원하지 않는다.
퀴즈 정답
튜플은 선택형 요소를 지원하고 객체 타입과 마찬가지로 ?를 '선택형'으로 사용할 수 있다.

@tooooo1
Copy link
Contributor

tooooo1 commented Jul 27, 2022

  1. 타입추론 시 unknown 타입도 고려하나요?
  2. (재미) number는 어디까지 정수를 표현할 수 있나요?
퀴즈 정답
1. 타입스크립트가 무언가의 타입을 unknown이라고 추론하는 상황은 없다. 2. 2의 53승

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants