Skip to content

Latest commit

 

History

History
203 lines (163 loc) · 6.51 KB

File metadata and controls

203 lines (163 loc) · 6.51 KB

복습

Type annotation

타입 주석.

const name: string = 'NaYoung';
function echo(param: string): string {
  return param;
}

타입스크립트가 지원하는 타입은 2종류

Basic Type

  • Boolean
const isLiar: boolean = true; // OK
const isTruth: Boolean = false; // OK
// 소문자 boolean를 지향하자.
// new Boolean()으로 생성한 값을 boolean 타입에 할당할 수는 있으나 그 반대는 안되기 때문이다.
  • Number
  • String
  • Array
    • array 선언 2가지 방식
      1. 리터럴 방식
    const animals: string[] = [ 'Cow', 'Dog', 'Cat' ];
    1. 제네릭 방식 (Generic 문법)
    const animals: Array<string> = [ 'Cow', 'Dog', 'Cat' ];
  • Null / Undefined
  1. Advanced Type.
  • Tuple : Tuple의 기본적인 성격은 Array랑 동일하다. 차이점은 요소로 가질 수 있는 타입이 여러가지로 나뉠 수 있다는 것이다.
let tuple: [ boolean, number ] = [ true, 0 ]; 
// boolean과 number만 받을 수 있는 Tuple

tuple.concat([ false, 1 ]);
tuple.push('string');  // string타입은 정해놓지 않았기 때문에 에러가 발생
// Error: Argument of type 'string' is not assignable to parameter of type 'number | boolean'.
let tuple: [ boolean, number ] = [ 0, true ];  // 순서도 중요하다
// Error: Type '[number, boolean]' is not assignable to type '[boolean, number]'.

TypeScript Tuple은 요소의 추가, 삭제, 수정이 자유롭지만 실제로 그렇게 쓰는 것 보다는, Python의 Tuple처럼 고정된 크기의 배열로 사용하는 것이 옳은 사용법이라고 할 수 있다.

콜론 뒤에 tuple이라고 명시하지 않고, 배열형태로 존재한다.

  • Any : 어떤 타입이든 통과하는 타입이다.
let anyVar: any = true;
anyVar = 1;
anyVar = null;

이런 식으로 어떤 타입의 값을 할당해도 오류가 나지 않는다. 정적 타입 검사가 없으므로 JavaScript와 차이가 없고 TypeScript의 장점이 드러나지 않는 만큼 되도록이면 사용을 지양해야겠지만, JavaScript 기반의 프로그램을 만드는 경우 어쩔 수 없이 사용해야 하는 경우가 종종 있다.

  • Void : Void는 함수에서만 특히 활용하는 타입이다
function log(arr): void {
  console.log(arr.join(', '));
}

위 함수처럼 리턴하는 값이 없는 함수의 경우 리턴 타입으로 void를 명시해줄 수 있다. 그러나 null 혹은 undefined 값을 할당할 수 있는 타입이므로 return null; 또한 가능하다. 변수에도 지정가능한 타입이지만, Null & Undefined 타입과 마찬가지로 null과 undefined밖에 할당할 수 없으므로 별로 쓸모가 없다.

  • Never Never 타입엔 null, undefined를 비롯해 어떤 값도 할당할 수 없다. 함수에 활용하는 경우 어떤 값도 리턴하지 않는 정도를 넘어서 도달 불가능한 부분이 있어야 타입 체크를 통과한다. 예를 들면, 항상 에러를 호출하는 함수이거나 무한루프가 포함된 함수여야 한다.

  • Enum Enum은 어떤 변수에 값으로 할당할 수 있는 요소들의 집합이다. 타 언어에서 보던 Enumertaion과 흡사한 개념이다. 다음과 같은 문법을 가진다.

enum Fruit { Apple, Banana, Melon };
let fruit: Fruit = Fruit.Apple;

그러나 앞선 타입과 달리 Enum은 정적 타이핑 검사만을 지원하는 개념이 아니고 실질적으로 JavaScript로 컴파일되면서 코드가 생성되는 부분도 있어서 다른 글에서 좀 더 깊게 다룰 생각이다.


2017/05 기초 세미나

4-2. var, let, const

var

  • ES5
  • 변수의 유효 범위 : 함수 스코프
  • 호이스팅 (O) : 선언이 더 나중에 이뤄질때 끌어올릴 수 있다.
  • 재선언 가능 let, const
  • ES6
  • 변수의 유효 범위 : `블록 스코프 (친숙)
  • 호이스팅 (X)
  • 재선언 불가 var 말고 let, const
  • 프리미티브 타입은 다른 값으로 못바꾸고,
  • 레퍼런스 타입은 다른 레퍼런스 타입을 가리키지 못하는 것인데,
    • 리터럴 타입이라는 것으로 타입을 강제한다.

redeclare (재선언)

  • let에서는 되지 않는다.

4-3. Type assersions(assersions: 주장,단언)

  • 형변환과는 다릅니다.
    • 형변환은 원래 실제 데이터 구조를 바꿔줍니다.
  • 타입스크립트에서의 어설션은 '타입이 이것이다' 라고 컴파일러에게 알려주는 것을 의미합니다.
    • 그래서 행동에 대해서 작성자가 100% 신뢰하는 것이 중요합니다.
  • 문법적으로는 두가지 방법이 있습니다.
    • 변수 as 강제할타입
    • <강제할타입>변수
    • 세심하게 확인이 필요하다. 컴파일러를 속이는 행위이기 때문이다.
let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;
let strLength: number = (someValue as string).length;

/*

1. 주로 넓은 타입에서 좁은 타입으로 강제하는 경우가 많다.
// 컴파일러를 속이는 행위이기도 하다.
2. jsx 에서는 as 를 쓴다.

*/

5-1. Type alias (타입 별칭)

  • 인터페이스랑 비슷해 보인다.
  • Primitive, Union Type, Tuple
  • 기타 직접 작성해야하는 타입을 다른 이름을 지정할 수 있다.
  • 만들어진 타입의 refer로 사용하는 것이지 타입을 만드는 것은 아니다.

Aliasing Primitive

// premitive타입을 string으로 aliasing을 하는 것
type MyStringType = string;

const str = 'world';

let myStr: MyStringType = 'hello';
myStr = str;

/*

별 의미가 없다..

*/

Aliasing Union Type

|

  • or의 느낌으로 사용한다.
let person: string | number = 0;
person = 'Mark';

type StringOrNumber = string | number;

let another: StringOrNumber = 0;
another = 'Anna';

/*

1. 유니온 타입은  A 도 가능하고 B 도 가능한 타입
2. 길게 쓰는걸 짧게

*/
let a: any;
let b: string | number;
// type StringNumber = string | number;

b = '스트링';
b = 0;

// function test(arg: StringNumber): StringNumber {
//     return arg;
// }
function test(arg: string | number): string | number {
    return arg;
}

Aliasing Tuple

let person: [string, number] = ['Mark', 35];

type PersonTuple = [string, number];

let another: PersonTuple = ['Anna', 24];

/*

1. 튜플 타입에 별칭을 줘서 여러군데서 사용할 수 있게 한다.

*/

<숙제>