TypeScript 자료형

수빈·2022년 3월 21일
0

TypeScript

목록 보기
2/7

⭐ TypeScript에서 제공하는 데이터 타입

JavaScript기본 자료형

  • Boolean
  • Number
  • String
  • Null
  • Undefined
  • Symbol
  • Array : object 형

추가 제공되는 타입

  • Any, void, Never, Unknown
  • Enum
  • Tuple : object형

Primitive Type

: 오브젝트와 레퍼런스 형태가 아닌 실제 값을 저장하는 자료형이다.
boolean, number, string, symbol, null, undefined

⭐ Boolean

let isDone: boolean = false;

isDone = true;

console.log(typeof isDone); //boolean

let isOk:Boolean = true;

let isNotOk:boolean = new Boolean(true); //boolean은 기본개체이지만 Bollean은 래퍼개체로 오류가 발생한다.

⭐ Number

: 모든 숫자는 부동 소수점 값이다.

let decimal:number = 6;
let hex:number = 0xf00d; //16진수
let binary:number = 0b1010; //2진수
let octal:number = 0o744; //8진수
let notANumber : number = NaN;
let underscoreNum :number = 1_000_000;

⭐ String

let myName: string = "Mark";
myName = "Anna";

//Template String 행에 걸쳐있거나 표현식을 넣을 수 있는 문자열 ` backquote 기호와 ${} 를 통해 사용할 수 있다.

let fullName: string = "Mark Lee";
let age: number = 30;

let sentence: string = `Hello, my name is ${fullName}. 
i'll be ${age + 1} years old next month`;

console.log(sentence); // Hello, my name is Mark Lee. i'll be 31 years old next month

⭐ Symbol

:new Symbol로 사용할 수 없다. 함수로 사용해서 타입을 만들어낼 수 있다.
고유하고 수정불가능한 값으로 만들어줘 주로 접근을 제어하는데 쓰는 경우가 많다.

const sym = Symbol();
const obj = {
  [sym] : "value",
};
// obj["sym"] 접근이 불가능 하다.
obj[sym]

⭐ null & undefined

tsconfig.json에서 --strictNullChecks를 사용하면 null과 undefined는 void나 자기자신에게만 할당할 수 있다.

null타입은 null값만 가질수 있으며 런타임에서의 타입은 object이다.
undefined 선언만하고 값을 할당하지 않은 상태로 런타임에서의 타입은 undefined이다.
nullundefined를 할당할 수 있게 하려면 union type를 이용해야한다.

let MyName: string = null; //Error
let u:undefined = null; //Error
let v:void = undefined;

let union: string | null = null;
union = 'mark';

⭐ object

: primitive type이 아닌 것을 나타내고 싶을 때 사용하는 타입이다.
(non-primitive type : number,string,boolean,bigint,symbol,null or undefined)

⭐ Array

공통된 요소들의 모임이다.
: 자바스트립트에서 array는 객체이다.

let list1:(number | string)[] = [1,2,3,"4"];
let list2:Array<number> = [1,2,3]; //자주 사용은 안한다.

⭐ Tuple

: 순서type,길이가 모두 맞아야한다.

let x:[string,number];
x = ["hello",10];
x = [10 , "mark"]; //error
x[2] = "world"; //error

const person:[string, number]=  ['mark', 20];
const [first, second] = person;
const [first, second,third] = person; // error

⭐ Any

  • 어떤 타입이어도 상관없는 타입 다 가능하다.
  • 컴파일타임에 타입 체크가 정상적으로 이뤄지지 않아 최대한 사용하지 않는게 좋다.
  • 개체를 통해 전파되므로 타입 안정성을 잃을수도 있어 주의해야한다.
function returnAny(message: any): any {
  console.log(message);
}

const any1 = returnAny("리턴은 아무거나");

any1.toString();

let looselyTyped: any = {};

const d = looselyTyped.a.b.c.d;

function leakingAny(obj: any) {
  const a = obj.num; //a = any
  const b = a + 1; //b = any
  return b;
}

const c = leakingAny({ num: 0 }); //c = any
c.indexof("0")

⭐ Unknown

  • 모르는 타입의 변수를 지정할때 사용한다.(api로 받는 동적인 데이터)
  • any와 같이 아무거나 할당할 수 있다.
  • 컴파일러가 타입을 추론할 수 있게끔 타입의 유형을 좁히거나, 타입을 지정해주지 않으면 다른 곳에 할당 할 수 없고, 사용할 수 없다.
  • unknown타입을 사용하면 runtime error를 줄일수 있다.
    (사용전에 데이터의 일부 유형의 검사를 수행해야하는 API에 사용한다.)
declare const maybe:unknown;

const aNumber:number = maybe;

if(maybe === true){
  const aBollean:boolean = maybe; //true
  // const aString:string = maybe;  error
}

if(typeof maybe === 'string'){
  const aString:string = maybe // string
}

⭐ never

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

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

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

  }
}
let a:string = 'hello';

if(typeof a !== "string") {
  //a에는 아무것도 할당할 수 없다.
}

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

type Indexable<T> = T extends string ? T & {[index:string]:any} : never;

⭐ void

어떤 타입도 가지지 않는 빈 상태로 함수의 반환타입으로 사용된다.

function returnVoid (message:string):void{
  console.log(message);
 return; // return undefined
}
const r = returnVoid('리턴이 없다.'); //r = void 타입

0개의 댓글

관련 채용 정보