[TIL] 타입스크립트 개념잡기 #3 - 기본 타입zip

소진수·2021년 8월 31일
0

TypeScript

목록 보기
2/3
post-thumbnail

Typescript 기본 타입


불리언 ( Boolean )

  • let isDone: boolean = false;

숫자 ( Number )

  • let decimal: number = 6;

문자열 ( String )

  • let color: string = "blue";
  • color = 'red';
  • 템플릿 리터럴도 적용된다. 표현식도 포함가능하다
    • let sentence: string = 'yellow, my name is ${ name }. age is ${ age + 1 }

배열 ( Array )

// 배열 타입은 두가지 방법으로 선언 가능하다.
let list: number[] = [1,2,3];
// 1. 배열 요소들을 나타내는 타입 뒤에 []를 쓴다.

let list: Array<number> = [1,2,3];
// 2. 제네릭 배열 타입을 쓴다.

튜플 ( Tuple )

  • 튜플은 요소의 타입과 개수가 고정된 배열을 나타낸다.
    • 모든 요소들의 타입이 모두 같을 필요는 없다.
// 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 위 선언된 변수의 타입과 같음으로 성공
// 잘못된 초기화
x = [10, 'hello']; // 오류

정해진 인덱스에 위치한 요소에 접근하면 해당 타입이 나타난다. 그 외에는 오류가 발생한다.

열거 ( Enum )

  • JavaScript 표훈 자료형 집합과 사용하면 도움이 될만한 데이터 형이다?
    • enum은 값의 집합에 더 나은 이름을 붙여준다?
    • enum은 기본적으로 배열처럼 0부터 시작하는 번호를 가진다.
    • 하지만 번호를 수동으로 설정하여 변경할 수 있다.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
// 기본 세팅

enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
// 이렇게 Red에 숫자 1을 할당하면 1번부터 시작하는 번호를 각각 가진다. // Green = 2, Blue = 3

enum Color {Red = 1, Green = 3, Blue = 4}
let c: Color = Color.Green;
// 이렇게 하면 각각 번호가 매겨진 값들을 Key로 사용할 수 있다.

let colorNmae: string = Color[3]; // 'Green'
// 위처럼 배열과 객체 사이처럼 값을 가져올 수 있다.

Any

  • 컴파일 검사를 통과하는 값을 지정할 때 사용되는 타입
    • 유저 / 서드 파티 라이버리 / 동적 컨텐츠에게 값을 받을 경우
let notSure: any = 4 ;
notSure = "maybe string"
notSure = false; // 이렇게 모든 값을 허용한다.

// 또한, any 타입은 타입의 일부만 알고 전체는 알지 못할 때 유용하다. ex) 여러 다른 타입이 섞인 배열
let list: any[] = [1, true, 'free'];

Void

  • void는 어떤 타입도 존재할 수 없을 때 사용된다. any의 반대 타입
  • 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 자주 사용된다.
function warnUser(): void {
console.log("warning");
}
// 이러면 반환 값이 없어도 실행된다.
// void 타입 변수는 null, undefined만 할당된다

let unusable: void = undefined;
unusable = null; // 성공 -- 이것이 가능한 이유는 '--strictNullChecks'를 사용하지 않아서

Null and Undefined

  • null 과 undefined는 자신의 타입 이름으로 사용된다
let u: undefined = undefined;
let n: null = null;
  • 기본적으로 null 과 undefined는 다른 모든 타입의 하위 타입이다.
    • 그러므로 null / undefined는 number와 같은 타입에 할당된다.
    • 하지만 --strictNullChecks 를 사용하면 오직 any와 각자 타입에서만 할당 가능하다.
      • 예외적으로 undefined는 void에 할당 가능하다..
  • 일반적인 에러를 방지하기 위해 사용된다
    • 유니언 타입을 활용하여 string | null | undefined 처럼 사용한다.

Never

  • 절대 발생할 수 없는 타입을 나타낸다.
  • 함수 표현식 / 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰인다??
    • 변수 또한 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never 타입을 얻게 된다?
  • never도 다른 모든 타입의 할당 가능한 하위 타입이다.
    • 하지만 어떤 타입도 never에 할당되거나 하위타입이 아니다. 심지어 any도 안됨
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
throw new Error(message);
}

// 반환 타입이 never로 추론된다. error 함수의 타입이 never이기 때문에
function fail() {
return error("someting fail");
}

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다. while도 도달못한다
function infiniteLooop(): never {
while (true) {
}
}

객체 ( Object )

  • 객체는 원시 타입이 아닌 타입을 나타낸다.

    • 원시타입 : number, string, boolean, bigint, symbol, null, undefined
  • object 타입을 쓰면, object.create 같은 API가 더 잘 나타난다?

declare function create(o: object | null): void; 
// 함수의 타입이 void여서 실행문 없어도 오류가 발생하지 않는다.
// create로 받아오는 매개변수는 object여야 실행된다.

create({ props: 0}); // 객체여서 실행
create(null); // null은 왜 되는거야??
create(undefined); // undefined는 또 왜 안되는거야??

타입 단언 ( Type assertions )

  • 타입 단언은 컴파일러를 대신해서 인간이 대신 검사를 했다고 타입 스크립트에게 고지한다.
    • 타입단언은 런타임에 영향을 미치지 않는다. 또한 타입스크립트가 개발자가 어떤 검사를 수행했다고 인지한다.
// 두가지 형식이 있다

// 1. angle-bracket 문법
let someValue: any = "this stirng!";
let strLength: number = (<string>someValue).length;
// any 타입의 변수의 앞에 타입을 angle-bracket으로 적어주고 대괄호로 감싸주면 string으로 컴파일된다.

// 2. as 문법
let someValue: any = "this stirng too";
let strLength: number = (someValue as string).length;
// any 타입의 변수의 뒤에 'as type'으로 적어주고 대괄호로 감싸면 string으로 컴파일된다.

Typescript와 JSX를 함께 사용할 때는 as문법만 허용된다


결론


새로운 친구들이 많다. 후후

profile
느려서 바쁘다

0개의 댓글

관련 채용 정보