ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Primitive Type
    Programming/JavaScript & TypeScript 2022. 2. 15. 10:33
    728x90

    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
Designed by Tistory.