TypeScript, 피보나치 수

이태성·2022년 6월 14일
0

TIL

목록 보기
4/8

Agenda

  1. Type 별칭
  2. 함수의 타입 지정
  3. unknown, never 타입
  4. 피보나치 수

1. Type 별칭

  • alias(별칭)

    alias

    type Combinable = number | string; // 별칭 표기법
    function combine(input1: Combinable, input2: Combinable){
    ...
    } 

2. 함수의 타입 지정

  • 표기법1
    function add(n1:number, n2: number):number {
    return n1 + n2;
    }
    // function 이름(매개변수):함수타입지정{
       함수 몸체
    }
  • 표기법2
    // 함수선언
    function combineValues(n1, n2){
    return n1 + n2
    }
    // 함수의 타입지정
    let combineValues: (a: number, b:number) => number;
    // 매개변수 a, b를 number타입으로 받고 return을 number타입으로 한다.
    console.log(combineValues(8, 8)) // return 16
  • void 타입 함수 : return이 없는 함수의 타입
    function printResult(num: number): void {
    console.log('Result' + num);
    }
  • callback 함수의 반환타입을 void로 지정해도 반환 작업을 수행 시킬 수 있다.
    function add(num1: number, num2: number, cb: (num:number) => void) {
    const result = num1 + num2
    cb(result)
    }
    add(10, 20, (result)=>{
    console.log(result)
    })
    또는
    add(10, 20, (result)=>{
    return result
    })

3. unknown, never 타입

  • unknown : TS의 모든 타입을 가질 수 있지만 다른변수에 할당시 에러를 발생시킬 수 있다.

    let myVar: unknown = 'hello'
    // 이 변수의 타입은 unknown이므로 어떤 타입의 값이든 할당과 재할당이 가능
    let myVar = 42;
    let age: number = myVar; // **오류** myVar 변수의 타입이 명확하지 않으므로 number 타입 변수에 값 할당이 불가능
    let age: number = (myVar as number); // unknown 타입 변수는 이렇게 사용할 때 타입을 명시해주어야 함
  • never : TS의 모든 타입의 하위 타입으로 어떠한 값도 할당 할 수 없다.

    // never 변수에는 어떤 값도 할당할 수 없다.
    // 그래서 아래의 두 코드는 TypeScript에서 컴파일 오류가 발생한다.
    const first: never = 42;
    const second: never = 'some text';
    • 그렇다면, never는 언제 사용할까? 많은 사용 방법이 있겠지만 여기서는 일반적으로는 함수가 어떠한 값도 반환하지 않을 때와 타입 추론 예외를 제거하는 방법을 소개한다.

    • 먼저, 아래와 같이 어떠한 값도 반환하지 않는 함수라면 반환 타입을 never로 명시하여 어떠한 값도 반환하지 않음을 알려줄 수 있다.

      const fetchFriendsOfUser = (username: string): never => {
       throw new Error('Not Implemented');
      }
    • never를 사용하여 특정 타입 값을 할당받지 않도록 하는것도 가능하다. 예를 들어 아래의 NonString 타입은 어떤 타입이든 될 수 있지만 string 타입인 경우는 never로 추론하여 string 타입의 값이 할당되지 못하도록 할 수 있다.

      type NonString<T> = T extends string ? never : T;

4. 피보나치 수

  • 백준 9단계 - 10870번 피보나치 수 5 코드공개
// 문제번호:10870번; 피보나치 수 5
const fs = require("fs");
const { join } = require("path");
const stdin = (
  process.platform === "linux" ? fs.readFileSync("/dev/stdin").toString() : `17`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line];
})(); // 여기까진 고정으로 사용

// 로직 시작
let num = +input();

function fibonacci(init) {
  if (init <= 1) {
    return init;
  } else {
    return fibonacci(init - 1) + fibonacci(init - 2);
  }
}
console.log(fibonacci(num));
profile
재밌게 뚫고 나가자

0개의 댓글