[Typescript] 기초문법

Asher Park·2023년 1월 17일
0
post-thumbnail

스파르타코딩클럽 내일배움캠프 Typescript 강의를 들으며 공부한 것을 적은 것입니다.

tsconfig.json 수정

  • "lib" 의 "dom"을 삭제
  • npm init -y
  • npm i @types/node

-> console.log 가 잘 작동한다!

@types/node 를 설치하여 타입스크립트에 console.log가 어떻게 정의 되어있는지를 알려준다.

  • npm i -g ts-node

tsc 명령어로 ts파일을 js파일로 변환하는 작업을 줄여준다.


타입

1. Boolean

let isCheck: boolean = false;

2. Number

let decimal: number = 6;

3. String

let color: string = "blue";

let fullName: string = `Park Hyunmin`;
let sentence: string = `my name is ${fullName}`;

4. 배열

  • 타입 뒤에 []붙이기
let list: number[] = [1,2,3];
  • 제네릭 타입
let list: Array<string> = ["안녕"];

5. 튜플

let tuple: [string, number] = ["hello", 10];

6. Enum

enum Color { Red, Green, Blue }
let c:Color = Color.Green;
  • 번호 수동 설정
enum Color { red = 1, green = 2, blue = 4 }
let c: Color = Color.green;
  • 번호 값을 사용하여 enum 이름 알아내기
enum Color { red = 1, green, blue }
let colorName: string = Color[2];

console.log(colorName) // Green

7. Any

  • 타입스크립트를 사용하는 의미가 사라지므로 사용하지 않는 것이 좋다!
let a: any = 4;
a = "abcd";
a = false;

8. Void

  • 어떠한 타입도 존재할 수 없음
  • any의 반대 타입
  • 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해
function warn(): void {
	console.log("Warning!");
}

9. Null, Undefined

let u: undefined = undefined;
let n: null = null;

10. Never

  • 오류 발생이나 절대 반환하지 않는 반환 타입에서 쓰임
function error(message: string): never {
	throw new Error(message);
}

function loop(): never {
	while(true) {
    }
}

11. Object

  • 원시 타입이 아닌 타입을 나타냄
function create(o: object | null): void {
}

create({ prop: 0 });
create(null);

인터페이스

  • 상호 간에 정의한 약속 혹은 규칙
    - 객체의 스펙 (속성과 속성의 타입)
    - 함수의 파라미터
    - 함수의 스펙
    - 배열과 객체를 접근하는 방식
    - 클래스
interface Human {
	name: string;
}

function printName(humanObj: Human) {
	console.log(humanObj.name);
}

let humanObj = { name: "Asher" };

printName(humanObj);

선택적 프로퍼티

  • 인터페이스를 사용할 때 인터페이스에 정의 되어있는 속성을 모두 사용할 필요는 없다
interface Human {
  name: string,
  phone?: number,
}

let humanObj = {
  name: 'Asher'
}

function humanInfo(humanObj: Human) {
	console.log(humanObj.name);
}

humanInfo(humanObj);

읽기전용 프로퍼티

  • 객체를 처음에 생성될 때에만 수정 가능해야 한다.
interface Point {
	readonly x: number,
  	readonly y: number,
}

let p1: Point = { x: 10, y: 20 }
p1.x = 5 	// 오류

함수 타입 인터페이스

interface login {
	(id: string, password: string): boolean;
}

let loginUser: login;

loginUser = function(id: string, password: string) {
  	console.log("로그인했습니다!");
	return true;
}

클래스 타입 인터페이스

interface Human {
	name: string;
  	printName(name: string): void;
}

class me implements Human {
	name: string = 'Asher';
  	printName(name: string) {
    	this.name = name;
    }
  	constructor() {}
}

인터페이스 확장

interface Person {
    name: string;
}

interface Developer extends Person {
    skill: string;
}

let be = {} as Developer;

be.name = 'Asher';
be.skill = 'Node.js';
profile
배움에는 끝이없다

0개의 댓글