타입스크립트 타입 선언

김래영·2021년 2월 21일
0

TypeScript

목록 보기
2/4

원시 타입


아래와 같이 타입을 설정하면 다른 타입의 종류를 할당할 수 없다. 다른 타입을 할당할 경우 타입 에러가 발생한다.

number

const age:number = 30 // number 타입만 할당이 가능하다.
const name:string = 3 // error (string 타입을 할당해야 한다.)

string

const name:string = 'sara'; // string 타입만 할당이 가능하다.

boolean

const isActive:boolean = true; // beelean 타입만 할당이 가능하다.

undefined : 값이 결정되지 않은 상태


let age: number | undefined // number 이거나 undefined
age = 30;
age = undefined;

function sum (): number | undefined {
  // .. return 되는 값이 number 이거나 undefined
};

null: 값이 없는 상태

let name: string | null;
name = 'ann';
name = null;

unknown

  • 어떤 데이터의 종류가 담길지 알 수 없는 상태 로 어떤 타입의 데이터든 할당할 수 있다.
  • 가능하면 사용하지 않는 것이 좋다.
let unknown:unknown = 'hello world';
unknown = 30;
unknown = true;

any

  • 어떤 데이터의 종류든 담을 수 있는 상태로 어떤 타입의 데이터든 할당할 수 있다.
  • 가능하면 사용하지 않는 것이 좋다.
let anything:any = 'hello world';
unknown = 30;
unknown = true;

Object 타입


Object

function object(obj:object) {}

object({age: 22});
object([1, 2, 3, 4, 5]);

Array

  • 문자열만 가지는 배열
const names: string[] = ['teaback', 'taesoon', 'sara'];
const names: Array<string> = ['teaback', 'taesoon', 'sara'];
  • number 타입만 가지는 배열
const ages: number[] = [20, 30, 50];
const ages: Array<number> = [20, 30, 50];
  • 문자열과 숫자를 동시에 가지는 배열
const arr: (string | number)[] = [10, 'hello', 22, 'world', 34];
const arr: Array<string | number> = [11, 'hello', 2, 'world', 33, 35];
  • 배열이 가지는 값의 타입을 어떤 것이든 담을 때 any를 사용할 수 있다.
const arr: (any)[] = [1, 'a', 2, 'b', 'c', 3];
const arr: Array<any> = [1, 'a', 2, 'b', 'c', 3];

readonly

  • 인자의 데이터를 변경할 수 없고 읽을 수만 있다.
function readNumbers(numbers: readonly number[]) { // Array<numbers>는 사용할 수 없다.
  console.log(numbers)
  numbers.push(6); // error 
}

readNumbers([1, 2, 3, 4, 5])

function : void

  • 아무것도 리턴하지 않는다.
function print():void {
  console.log('hello');
  return; // 생략 가능
}

function: never

  • 절대 리턴할 수 없다.
function throwError(message: string): never {
  // message -> server (log)
  // throw new Error(message);
  // while 문..
}

promise

  • 숫자를 리턴하는 promise
function fetchNum(id: string): Promise<number> {
   ...
   return new Promise((resolve, reject) => {
     resolve(100);
   });
}

optional parameter

  • 인자로 전달 받을수도 있고 전달 받지 않을 수도 있다.
function fullName(firstName:string, lastName?:string) {}  // lasName을 전달 받을 수 있고 전달 받지 않을 수 있다.
fullName('minsoo', 'kim');
fullName('minsoo');

default

  • 인자를 전달 받지 않을 때 기본 값으로 설정해 놓을 수 있다.
function printMessage(message:string = 'default message') {};

printMessage();  // default message 

Rest parameter

  • 전달하는 인자 개수의 제한이 없고 동일한 타입의 데이터를 인자로 전달할 때 사용할 수 있다.
function addNumbers(...numbers: number[]): number {
  return numbers.reduce((acc, curr) => acc + curr);
};

addNumbers(1, 2);
addNumbers(1, 2, 3, 4);

Tuple


  • 고정된 서로 다른 타입을 할당할 때 사용한다.
  • 사용을 권장하지 않음.
  • interface, type alias, class 대체해서 사용하는 것이 좋음.
let anything: [string, number];
anything = ['abc', 123];
anything[0];
anything[1];

const [string, number] = anything;

Type Alias


  • 아래와 같이 Text , Num , Person 라는 타입을 정의할 수 있다.
type Text = string;
const name: Text = 'ellie';
const const address: Text = 'korea';

type Num = number;

type Person = {
  name: string;
  age: number;
};

const person: Person = {
  name: 'kim rae young',
  age: 33,
};
  • 아래와 같이 Name에 'name'이라는 타입을 정의한다면 'name'만 할당할 수 있다.
type Name = 'name';
let name = Name;
name = 'name'

Union type


  • 아래의 Size 타입과 같이 다중의 타입을 말한다.
  • printSize 함수의 인자는 Size 타입을 인자로 전달받기 때문에 25 | 26 | 27 | 28의 값만 전달받을 수 있다.
type Size = 25 | 26 | 27 | 28;
function printSize(size: Size) {
  console.log(size);
};
printSize(25);
printSize(27);

Intersction type : &


  • 타입 하나로 묶을 수 있다.
type A = {
  name : string;
  age: number;
};

type B = {
  feeling : () => void;
}

function anything(AB: A & B) {

};

anything({
  name: 'taeback',
  age: 1,
  feeling: () => {}
});

Enum


  • enum은 다른 값을 할당할 수 있어 가능한 enum을 사용하지 않는것이 좋다.
  • 가능한 union 타입을 사용한지만 , 네이티브 프로그래밍에는 enum을 사용한다.

enum Aphabet {
  A,
  B,
  C,
  D,
  ...
}

// enum에 따로 값을 정하지 않으면 0 부터 하나씩 증가한다.
// 1을 할당 해주면 1부터 증가하고 문자열도 할당할 수 있다. 

let b = Aphabet.B;
b = 10
console.log(b); // 10

// 위와 같이 다른 값을 할당할 수 있어 가능한 enum을 사용하지 않는 것이 좋다.
profile
개발 노트

0개의 댓글