TIL# 162 TypeScript(1)

Dasom·2022년 6월 28일
0

typescript

목록 보기
1/1
let person:string = 'Tom';
let age:number = '33';
let isAdult:boolean = true;

// number[] = Array<number>
let a:number[] = [1, 2, 3];
let a2:Array<number> = [1, 2, 3];

// string[] = Array<string>
let week1:string[] = ['monday', 'tuesday', 'wednesday'];
let week2:Array<string> = ['monday', 'tuesday', 'wednesday'];

// tuple
let b:[string, number];

b = ['aa', 11] 
b = [11, 'aa'] // 불가능

// object
let user:object;

user = {
  name: 'Jane',
  age: 25
}

console.log(user.name) // object에 name이라는 속성이 없다고 에러가 뜸

// 해결방법 : interface
type Score = 'A' | 'B' | 'C' | 'D' | 'F'  // literal type

interface User {
  name: string;
  age: number;
  gender?: string; // optional property - 있어도 되고 없어도 되는 속성
  readonly birth: number // 수정할 수 없는 속성
  [grade:number]: Score;  // 같은 타입의 속성키, 속성값이 많은 경우
}

let user:User = {
  name: 'Jane',
  age: 25
}

console.log(user.name) // ok
// interface 로 함수도 정의 가능
interface Add {
  (num1:number, num2:number):number;
}

const add:Add = function(a, b) {
  return a + b;
}

interface IsAdult {
  (age:number):boolean;
}

const a:IsAdult = (age) => {
  return age > 19;
}

// void - 함수에서 리턴되는 값이 없을 때 사용
function sayHello():void {
  console.log('hello');
}

// never - 항상 에러를 반환하거나 영원히 끝나지 않는 함수일 때 사용 
function showError():never {
  throw new Error();
}

function infLoop():never {
  while (true) {
    // do something
  }
}

// 그저 타입이 아닌 정해진 값들만으로 제한하고 싶을 때 - enum or literal type

// 열거형 enum - 연관된 아이템들을 함께 묶어서 표현
// enum 속에 선언한 순서에 따라 0부터 시작해서 숫자가 할당된다.
// 따라서 Male은 0, Female 은 1이 할당 되고 숫자를 직접 바꿀 수도 있다.
enum GenderType {
  Male,
  Female,
  GenderNeutral
}
// 숫자형 enum이 아닌 문자열을 할당하게 하고 싶다면 직접 선언하면 된다.
enum GenderType {
  Male = 'male',
  Female = 'female',
  GenderNeutral = 'genderNeutral'
}

// 리터럴 타입
interface Student {
  ...
  gender: 'male' | 'female' | 'genderNeutral'
  ...
}
  

참고-땅콩코딩 youtube
참고-코딩앙마 youtube

profile
개발자꿈나무🌲

0개의 댓글