본문 바로가기
프로그래밍 언어/TypeScript

basicType

by zieunee 2022. 2. 13.
반응형

Primitive type

  • 오브젝트 레퍼런스 형태가 아닌 실제 값을 저장하는 자료형
  • 프리미티브 형의 내장함수를 사용 가능한 것은 자바스크립트 저리방식 덕분이다.
  • boolean / number /string / symbol/null/undefined 6가지 이다.
let name = 'mark';
name.toString();
  • lteral 값으로 primitive 타입의 서브타입을 나타낼 수 있음
  • 래퍼객체로 만들수 있음 but 타입스크립트에서는 권장하지 않는다.
  • new Bollean(false); new String('hello');
  • Type Casing

Boolean

let isDone: boolean = false;

isDone = true;
console.log(typeof isDone);

let isOk: Boolean = true;

Number

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let notANumber: number = NaN;
let underscore: number = 1_00_000;
  • 모든 숫자는 부동 소수점 값이다.
  • 16진수 및 10진수 리터럴 외에도 es5에 도입된 2진수 및 8진수를 지원한다
  • NaN , 1_000_000같이 표기도 가능하다.

string

큰따옴표나 작은따옴표 사용

let myName: string = "hello";

Template String

  • 행에 걸쳐있거나 표현식을 넣을 수 있는 문자열
  • backtick 기호에 둘러쌓여있다.
  • ${expr} 과 같은 형태로 사용한다.
let fullName: string = `Bob`;
let sentence: string = `Hello, my name is ${ fullName }`

symbol

symbol을 함수로 사용해서 symbol 타입을 만들어 낼 수 있다.

console.log(Symbol('foo') === Symbol('foo'));
  • primitive 타입의 값을 담아서 사용한다.
  • 고유하고 수정 불가능한 값으로 만들어준다.
  • 주로 접근을 제어하는데 쓰는 경우가 많음
let sym = Symbol();
let obj = {
  [sym]: "value",
};
obj[sym]; //직접 접근을 막는다 obj["sym"] 은 불가능

null & undefined

let u: undefined = undefined;
let n: null = null;
  • 모든 타입의 sub type이다.
  • 설정을 하지 않는 값
  • number 에 null또는 undefined를 할당할 수 있다는 의미
  • 하지만 컴파일 옵션에서 --strictNullChecks를 사용하면 null과 undefined는 void나 자기자신에게만 할당할 수 있다.
let union: string | null = null;
//둘다 넣을 수 있음
union = "mark"; 
// null이 아닐때 string으로..
  • null
    • 런타임에서 typeof연산자로 확인하면 object이다.
  • undefined
    • 무언가 아예준비가 안된상태
    • 값을 할당하지 않는 변수
    • typeof : undefined

Object

primitive type이 아닌것 을 나타내고 싶을 때 사용하는 타입이다.

declare function create(o: object | null) : void
//primitive를 갖지 않는다.

Array

  • 자바스크립트에서 array는 객체
  • 사용방법
    • Array<타입>
    • 타입[]
    • let list: number[] = [1, 2, 3]; let list2: Array<number> = [1, 2, 3]; let list3: (number | string)[] = [1, 2, 3, "4"];

Tuple

let x: [string, number];
x = ["hello", 39];

const person: [string, number] = ["mark", 39];
const [first, second] = person;
//person에 있는 요소를 가지고 와서 넣는다

any

  • 어떤 타입이여도 상관없음
  • 최대한 쓰지 않기 > 타입체크가 정상적으로 이뤄지지 않음
function returnAny(message: any): any {
  console.log(message);
}
const any1 = returnAny("리턴은 암거나");
any1.toString(); //어떤것이던 할 수 있다.
  • 개체를 통해 전파된다.
  • let looselyType: any = {}; const d = looselyType.a.b.c.d;
  • 동적인 데이터가 들어올때는 쓸수있지만 .. 되도록 쓰지 말 것 !! 누수를 막는 지점을 확인해야한다.
  • function leakingAny(obj: any) { const a: number = obj.num; // number이면 ? 이라는 조건을 만들어서 누수를 막는다. const b = a + 1; return b; } const c = leakingAny({ num: 0 }); c.indexOf("0"); //x

unknown

declare const maybe: unknown;

if (maybe === true) {
  //maybe는 boolean이된다.
  const aBooleanL: boolean = maybe;
  const aStringL: string = maybe; //error
}

if (typeof maybe === "string") {
  //maybe는 string이된다.
  const aBooleanL: boolean = maybe; //error
  const aStringL: string = maybe;
}

타입 가드

never

  • 모든타입의 subtype 이며 , 모든 타입에 할당 할 수 있다.
  • 하지만 never에는 그 어떤것도 할당 불가능하다.
  • any 조차도 never 에 할당할 수 없다
  • 잘못된 타입을 넣는 실수를 막고자할 때 사용
function error(message: string): never {
  throw new Error(message);
}

function fail() {
  return error("failed");
}

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

declare const a: string | number;
if (typeof a !== "string") {
  a; // number임
}

type Indexable<T> = T extends string ? T & { [index: string]: any } : never;
// T가 string이면 T를 { [index: string]: any } 이거고 아니면 never이다.
const b: Indexable<{}> = ""; // error

void

function returnVoid(message: string){
    console.log(message);

    return;
}

const r = returnVoid('리턴없음');
반응형

'프로그래밍 언어 > TypeScript' 카테고리의 다른 글

interface  (0) 2022.02.14