Javascript

[TS] 기본 문법 타입 정리

개발자 혜진 2023. 5. 25. 14:41

TypeScript 문법을 정리하려고 합니다!

 

TypeScript란?

  •  자바스크립트에 타입을 부여한 언어
  • 자바스크립트의 단점을 보완해 만든 언어
  • 정적타입언어

TypeScript  기본 타입

일반 변수, 매개변수, 객체 속성 등에 :TYPE과 같은 형태로 타입을 지정할 수 있습니다.

 

1. Number

//js
let num = 1;

//ts
let num:number = 1;

num = 2; 
num = '2'; //error

2. String

let car:string = 'bmw';

3. Boolean

let isDone:boolean = false;

4. Array

//일반적인 배열
let numList:number[] = [1,2,3];
let numList:Array<number> = [1,2,3];

let stringList : string[] = ['1','2','3'];
let stringList:Array<string> = ['1','2','3'];

numList = ['1','2','3']; // error
stringList = [1,2,3,];//error

//다중 타입 선언
let numStringList:(string|number)[] = ['a',1,'b'2];
let numStringList:Array<string|number> = ['a',1,'b'2];

//배열이 가지는 항목의 값이 어떤것일지 모를때
let someList:any[] = [0,'1',true,{},[]]

//인터페이스나 커스텀 타입 사용
interface User {
	name: stirng,
    age: number,
    isVaild: boolean
}

let userList:User[] = [
	{
      name: 'ju',
      age: 30,
      isVaild: true
    },
    {
      name: 'hyejin',
      age: 29,
      isVaild: false
    }
]

//readonly 타입 사용
let aList:readonly number[] = [1,2,3];
let bList:ReadonlyArray<number>=[1,2,3];

배열은 두가지 방법으로 사용할 수 있습니다.

  • 배열 요소들을 나타내는 타입 요소 뒤에 [] 사용
  • 제네릭 배열 타입 사용

유니언 타입(다중타입)의 문자열과 숫자를 동시에 가지는 배열도 선언할수 있습니다.

interface나 커스텀 타입을 사용할 수도 있습니다.

readonly로 읽기 전용 배열을 생성 할 수 있습니다.

 

5. Tuple

//일반적인 튜플 사용
let b:[string,number];

b = ["hello",10];
b = [10, "hello"]; //error

console.log(b[0].toLowerCase());
console.log(b[1].toLowerCase(1)); // error number에는 toLowerCase 없음

b[3] = 'hi'; // error 프로퍼티 3이 없음

//데이터를 개별 변수로 지정하지 않고, 단일 Tuple 타입으로 지정
let userId:number = 12;
let userName:string = 'hyejin';
let isValid:boolean = true;

let userA:[number,string,boolean] = [12,'hyejin',true];

//Tuple 타입의 2차원 배열 생성
let userA:[number,string,boolean][];
let userB:Array<[number,string,boolean]>;
userA = [[1,'hyejin',true],[2,'ju',false]];

// 값으로 타입을 대신할 수 있다.
let tupleA:[1,number];
tupleA = [1,2];
tupleA = [2,3]; //error

// push는 막을 수 없다.
let c:[string,number];
c = ['a',1];
c.push(3);
console.log(c); // ['a',1,3]
c.push(true); //string,number타입만 가능 하기 때문에 에러발생

//readonly를 사용해 읽기 전용 튜플 생성
let d:readonly[string,number] = ['a',1];
a[0] = 'b' // error

튜플 타입은 요소의 타입과 개수가 고정된 배열을 표현 할 수 있습니다.

  • 데이터를 개별 변수로 지정하지 않고, 단일 Tuple 타입으로 지정해 사용할 수 있음
  • 2차원 배열 생성 가능
  • 값으로 타입을 대신할 수 있음
  • readonly를 사용해 읽기 전용 튜플 생성 가능
  • 정해진 타입의 고정된 길이 배열을 표현하지만 할당에 국한됨 -> push(), splice()등을 통해 값을 넣는 행위는 막을 수 없음
  • 정해진 인덱스 외에 다른 인덱스에 있는 요소에 접근하면 오류 발생

 

6. Void 

function sayHello():void{
	console.log('hello');
}

함수에서 아무것도 반환하지 않을때 주로 사용합니다.

 

7. Never

function showError(){
	throw new Error();
}

function infloop(){
	while(true){
    	//do somthing...
    }
}

절대 발생할 수 없는 타입을 나타냅니다.

항상 오류를 발생시키거나, 절대 반환하지 않는 반환 타입으로 쓰입니다.

 

8. Enum

enum Color {
	Red,
    Orange,
    Yellow
}


let myColor:Color; // Red, Orange, Yellow만 입력 받을 수 있음.

myColor = Color.Red;

enum은 특정 값만 사용하도록 강제하고 싶은데 그 특정 값들의 공통점이 있는 경우 사용합니다.

  • 기본적으로 0부터 시작하여 멤버들의 번호를 매김
  • 수동으로 멤버의 값을 변경 할 수 있음
  • 변경 할때에 숫자 뿐 아니라 문자열을 입력 할 수 도 있음
  • 역방향 매핑을 지원 함(문자열 값으로 초기화 시 역방향 매핑 지원 x)

9. Null

let n:null = null;

10. undefined

let u:undefined = undefined;

11. Any

let notSure:any = 4;
notSure = "maybe a string instead";
notSure = false;

Any는 모든 타입을 의미

일반적인 자바스크립트 변수와 동일하게 어떤 타입의 값도 할당할 수 있습니다.

해당 타입을 추론할 수 없기 때문에 잠재 버그가 있어서 런타임 에러를 발생 시킬 수도 있기때문에 자주 사용하는 것을 피해야 합니다.