: 오브젝트와 레퍼런스 형태가 아닌 실제 값
을 저장하는 자료형이다.
boolean
, number
, string
, symbol
, null
, undefined
let isDone: boolean = false;
isDone = true;
console.log(typeof isDone); //boolean
let isOk:Boolean = true;
let isNotOk:boolean = new Boolean(true); //boolean은 기본개체이지만 Bollean은 래퍼개체로 오류가 발생한다.
: 모든 숫자는 부동 소수점 값이다.
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;
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
:new Symbol
로 사용할 수 없다. 함수로 사용해서 타입을 만들어낼 수 있다.
고유하고 수정불가능한 값으로 만들어줘 주로 접근을 제어하는데 쓰는 경우가 많다.
const sym = Symbol();
const obj = {
[sym] : "value",
};
// obj["sym"] 접근이 불가능 하다.
obj[sym]
tsconfig.json
에서 --strictNullChecks
를 사용하면 null과 undefined는 void나 자기자신에게만 할당할 수 있다.
null
타입은 null값만 가질수 있으며 런타임에서의 타입은 object이다.
undefined
선언만하고 값을 할당하지 않은 상태로 런타임에서의 타입은 undefined이다.
null
과undefined
를 할당할 수 있게 하려면 union type
를 이용해야한다.
let MyName: string = null; //Error
let u:undefined = null; //Error
let v:void = undefined;
let union: string | null = null;
union = 'mark';
: primitive type
이 아닌 것을 나타내고 싶을 때 사용하는 타입이다.
(non-primitive type : number,string,boolean,bigint,symbol,null or undefined)
공통된 요소들의 모임이다.
: 자바스트립트에서 array는 객체이다.
let list1:(number | string)[] = [1,2,3,"4"];
let list2:Array<number> = [1,2,3]; //자주 사용은 안한다.
: 순서
와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
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")
any
와 같이 아무거나 할당할 수 있다.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
에는 그 어떤 것도 할당할 수 없다.(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;
어떤 타입도 가지지 않는 빈 상태로 함수의 반환타입으로 사용된다.
function returnVoid (message:string):void{
console.log(message);
return; // return undefined
}
const r = returnVoid('리턴이 없다.'); //r = void 타입