타입스크립트

[TS]타입스크립트란, 타입지정

민ズl 2024. 12. 10. 11:08

타입스크립트란🤔

자바스크립트와 다르게 타입 시스템을 갖음

=> 프로그램이 실행되기 전에 모든 변수와 표현식의 타입을 확인하고 고정하는 방식

 

JS vs TS

특징 JS TS
타입 시스템 동적 타입 정적 타입
컴파일 필요 없음 js로 컴파일 필요
개발 경험 유연하고 빠르게 시작 가능 코드 완성, 타입 검사 등으로 향상된 개발 경험
프로젝트 규모 소규모 대규모
런타임 오류 런타임에 타입 오류 발견 가능 컴파일 타입 오류 발견 가능
학습 곡선 낮음 높음
도구 지원 광범위한 도구와 라이브러리 지원 JS생태계의 모든 도구와 라이브러리 지원
브라우저 지원 모든 브라우저에서 기본적으로 지원 트랜스 파일 된 JS가 모든 브라우저에서 지원

 

타입선언

  • 불리언 : boolean
let isBoolean: boolean;
let isDone: boolean = false;
  • 숫자 : number
let num: number;
let integer: number = 6;
let float: number = 3.14;
let hex: number = 0xf00d; // 61453
let binary: number = 0b1010; // 10
let octal: number = 0o744; // 484
let infinity: number = Infinity;
let nan: number = NaN;
  • 문자열 : string
let str: string;
let red: string = 'Red';
let green: string = 'Green';
let myColor: string = `My color is ${red}`;
let yourColor: string = 'Your color is ' + green;
  • 배열 : Array
let fruits: string[] = ["Apple", "Banana", "Mango"];
let fruits: Array<string> = ["Apple", "Banana", "Mango"];

let oneToSeven: number[] = [1, 2, 3, 4, 5, 6, 7];
let oneToSeven: Array<number> = [1, 2, 3, 4, 5, 6, 7];

let array: (string | number)[] = ["Apple", 1, 2, "Banana", "Mango", 3];
let array: Array<string | number> = ["Apple", 1, 2, "Banana", "Mango", 3];

let someArr: any[] = [0, 1, {}, [], "str", false];
  • 인터페이스 : interface
    => 객체의 구조를 정의하는 데 주로 사용
interface IUser {
  name: string;
  age: number;
  isVaild: boolean;
}

let userArr: IUser[] = [
  {
    name: "Neo",
    age: 10,
    isVaild: true,
  },
  {
    name: "Lewis",
    age: 64,
    isVaild: false,
  },
  {
    name: "Evan",
    age: 123,
    isVaild: true,
  },
];
  • 타입 별칭 : type
    => 객체, 유니언(union), 튜플(tuple) 등 다양한 타입을 정의
type User = {
    name: string;
    age: number;
    isValid: boolean;
};

let userArr: User[] = [
    {
        name: "Neo",
        age: 10,
        isValid: true,
    },
    {
        name: "Lewis",
        age: 64,
        isValid: false,
    },
    {
        name: "Evan",
        age: 123,
        isValid: true,
    },
];
  • Null, undefined
let undefin: undefined = undefined;
let nul: null = null;

let stringOrNull: string | null = null;
let numberOrUndefined: string | undefined = undefined;
  • any : 모든곳에 쓰임
let any: any = 123;
any = 'play game';
any = {};
any = null;

const arr: any[] = [1, true, 'typescript'];
  • void : return값이 없을때
function coding(msg: string): void {
  console.log(`Happy ${msg}`);
}
  • 🌟 유니온 : |
    => 마치 자바스크립트의 OR 연산자와 같은 타입, 타입을 여러개 연결하는 방식
let union: (string | number);
union = 'Hello World';
union = 777;
union = false; // Error
  • 인터섹션 : &
    => 마치 자바스크립트의 && 연산자와 같은 타입, 두개이상의 타입을 조합하여 하나의 타입으로 합치는 방식
interface User {
  name: string,
  age: number
}

interface Validation {
  isValid: boolean
}

const testCase2: User & Validation = {
  name: 'jisu',
  age: 30,
  isValid: true
}
  • 함수 : function(){}
let myFunc: (arg1: number, arg2: number) => number;
myFunc = function(x, y) {
  return x + y;
}
myFunc(1, 2); // 3

let noneFunc: () => void;
noneFunc = function () {
  console.log('hihi');
};

*이런타입도 있다~

  • 읽기 전용 : readonly
let arrA: readonly number[] = [1, 2, 3, 4];
let arrB: ReadonlyArray<number> = [2, 4, 6, 8];
  • 튜플 : Tuple
    => 배열같이
let tuple: [string, number];
tuple = ['a', 1];
tuple = [1, 'a']; // Error

let userA: [number, string, boolean] = [1234, 'juyoung', true];

let usersA: [number, string, boolean][];
let usersB: Array<[number, string, boolean]>
usersA = [[1, 'chisus', true], [2, 'jisu', false]];

let tupleA: [1, number];
tupleA = [1, 2];
tupleA = [2, 3]; // Error

let a: readonly [string, number] = ['rest', 123];
a[0] = 'work'; // Error
  • 열거형 : enum
enum Week {
  Sun,
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat
}

enum Color {
  Red = 'red',
  Green = 'green',
  Blue = 'blue'
}
  • 객체 : object
let obj: object = {};
let arr: object = [];
let func: object = function () {};
let date: object = new Date();

interface Users {
  name: string,
  age: number
}

let userA: Users = {
  name: 'juyoung',
  age: 27
};
  • 알 수 없는 타입 : unknown
let u: unknown = 123;
let test1: number = u; // Error
let test2: number = u as number;
let test3: any = u;
  • Never
    =>결코 발생하지 않는 값
function error(message: string): never {
  throw new Error(message);
}

const never: [] = [];
never.push(3); // Error