-
Primitive TypeProgramming/JavaScript & TypeScript 2022. 2. 15. 10:33728x90
Primitive Type
Object와 레퍼러스 형태가 아닌 실제 값을 저장하는 자료형
프리미티브 형의 내장함수를 사용가능하는 것은 자바스크립트 처리 방식 가능
ex) let name = 'mark'
name.toString()
종류
- boolean, number, string, symbol, null, undefined
literal 값으로 Primitive 타입의 서브 타입을 나타낼수 있다.
true (Boolean의 subType)
'hello' (String의 subType)
3.14
null
undefined
또는 래퍼 객체로 만들 수 있다. 이건 오브젝트임 ..타입스크립트에서는 이렇게 쓰는것을 추천하지 않음
new Boolean(false); // typeof new Boolean(false) : 'object'
new String('world'); // typeof new String('world') : 'object'
new Number(42); // typeof new Number(42) : 'object'
boolean
let isDone:boolean = false; isDone = true; console.log(typeof isDone) //'boolean' let isOK:Boolean = true; //let isNotOk:boolean = new Boolean(true); //소문자는 primitive type, 대문자는 Object type이여서 에러나는 코드
number
let decimal:number = 6; let hex:number = 0xf00d let binary:number = 0b1010 let octal:number = 0o744 let notAnumber:number = NaN; //NaN이 숫자의 한 형태 let underscoreNum:number = 1_000_000
string
let myName:string = "Mark" myName = 'Anna';
Template String
행에 걸쳐 있거나, 표현식을 넣을 수 있는 문자역
이 문자열은 backtick기호에 둘러쌓여 있음
포함된 표현식은 '${expr} 형태로 사용
let fullName:string = "Mark Lee"; let age:number = 11; let sentence:string = `Hello, My name is ${fullName}, age ${age}.` console.log(sentence)
symbol
ES2015부터 지원가능
new Symbol 사용 불가능, 함수처럼 호출해서 사용가능
console.log(Symbol('foo') === Symbol('foo')); // false
프리미티브 타입의 값을 담아서 사용
고유하고 수정불가능한값으로 만들어준다.
null & undefined
null은 null만, undefined는 undefined만 가질 수 있다.
이 둘은 다른 모든 타입의 subType으로 존재한다.
//같은 타입에만 사용 가능 let u:undefined = undefined let n:null = null //이렇게 사용하면 에러남 //컴파일 옵션에서 --strictNullChecks를 사용하면 가능 //void는 사용 가능 //let name:string = null //let age:number = undefined //나중에 나올 union type을 사용해야됨 let union:string|null|undefined = null union = 'asd'
null은 값이 없는 상태, undefined는 선언은 되었지만 사용되지 않은 상태
object
// create by object literal const person1 = {name:'Mark', age:39} //person1 not object type //person1 is "{name:string, age:number}" type. // create by Object.create const person2 = Object.create({name:'Mark', age:39})/ //object | null type으로 표시된다.
프리미티브 타입이 아닌것을 나타내고 싶을때 사용하는 타입
사용예제
let obj:object = {} obj = {name:'Mark'} obj = [{name:'Mark'}]; // obj = 39 error
Array
같은 타입의 요소들을 모아놓은 타입
//자바스크립트에서는 array는 객체 //사용방법 //array let list:number[] = [1,2,3] let list2:Array<number> = [1,2,3]
Tuple
다른 타입의 요소들을 모아놓은 타입
길이가 정확해야한다.
//튜플은 앞뒤로 다른 타입을 넣게 된다. //순서도 타입도 다 맞아야한다. let x:[string, number]; x = ["hello", 39] //유연하게 크기를 늘릴 수 없음 //x[2] = "world" // 오류 const person:[string, number] = ["Mark", 39] const [first, second] = person //분해 할당 //만약 number와 string을 같이 쓰고 싶으면 union을 사용해야된다. let list3:(number|string)[] = [1,2,3,"4"]
any
어떤것이나 된다. 어떤것도 할 수 있다.
이걸 최대한 쓰지 않는게 핵심
컴파일 타임에 타입체크가 정상적으로 이뤄지지 않는다.
모든 편의는 타입안전성을 잃는 대가로 돌아온다는것을 기억하자.
function returnAny(message:any):any { console.log(message) } const any1 = returnAny('리터은 아무거나') //이때부터는 any1은 제약을 받지 않는다.
unknown
응용프로그램을 작성할때 모르는 변수의 타입을 묘사해야될 때도 있다.
컴파일러와 미래의 코드를 읽는 사람에게 이 변수가 어떤한 변수값이 될 수 있다는것을 알려줘야한다.
타입을 한정시켜야지만 사용가능하다.
declare const maybe:unknown; //const aNumber:number = maybe; unknown은 nubmer에 바로 할당 불가 if (maybe === true) { //이 if문 안에서 maybe는 boolean형임 const aBoolean :boolean = maybe; //const aString:string = maybe; } if (typeof maybe === 'string') { // 이 안에서 maybe는 string이 된다. const aString:string = maybe; }
never
return에 사용된다.
모든 타입의 서브타입, 모든 타입에 할당 가능
never는 그 어떤것도 할당 불가, any도 할당 불가
잘못된 타입을 넣고자하는 실수를 방지하려고 할때 ...사용
function error(message:string):never { //아무것도 리턴되지 않는다. throw new Error(message); } function fail() { //리턴값이 never로 추론됨 return error('failed'); } function infiniteLoop() :never { while(true) { } }
void
undefined가 있기 때문에 자주 사용하지 않음
값은 없고 타입만 있음
변수에다 사용하지 않음, 값을 반환하지 않는 함수에서만 사용
'Programming > JavaScript & TypeScript' 카테고리의 다른 글
TypeSystem (0) 2022.02.16 사용자의 관점으로 코드 바라보기 (0) 2022.02.16 TypeScript vs JavaScript (0) 2022.02.15 리액트를 다루는 기술 (0) 2021.12.16 map (0) 2021.09.26