본문 바로가기
반응형

타입 별칭(alias)과 선택적 프로퍼티(optional properties)

타입 별칭 (Type Alias)

타입 별칭은 특정 타입에 이름을 붙여 코드에서 반복해서 사용할 수 있게 해주는 기능이다.. 이는 코드의 가독성을 높이고, 타입을 재사용할 수 있도록 도와준다. 타입 별칭은 기본 타입뿐만 아니라 복잡한 객체 타입에도 사용할 수 있다. 

 

선택적 프로퍼티 (Optional Properties)

선택적 프로퍼티는 객체의 특정 프로퍼티가 필수적이지 않고 선택적으로 포함될 수 있음을 나타낸다. 선택적 프로퍼티는 타입 정의에서 프로퍼티 이름 뒤에 물음표(?)를 붙여 표시하여 사용할 수 있다. 

Flutter에서 Modal 클래스와 Nullable 객체 처리하였던 기억이 났다 :)

type Age = number;    // 'Age'는 숫자 타입으로 정의된 타입 별칭(alias)
type Name = '정규' | '정언';  // 'Name'에 대해서 특정 text를 적용

type Player = {       // 'Player' 타입은 객체 타입으로 정의된 타입 별칭을 말한다.
    name: Name;       // 'name' 프로퍼티는 'Name' 타입, 즉 문자열 타입을 말한다.
    age?: Age;        // 'age' 프로퍼티는 선택적(optional)이며, 'Age' 타입, 즉 숫자 타입이다.
}

const jk: Player = { // 'jk'는 'Player' 타입으로 선언된 상수이다.
    name: "정규"       // 'name' 프로퍼티만 설정되어있다.
}

const je: Player = { // 'je'도 'Player' 타입으로 선언된 상수이다.
    name: "정언",      
    age: 12           
}

// 'playerMaker' 함수는 문자열 타입의 인자를 받고 'Player' 타입의 객체를 반환한다.
function playerMaker(name: string): Player { 
    return {
        name         // 객체의 'name' 프로퍼티에 인자로 받은 'name'을 설정하여 반환한다.
    }
}

const jk2 = playerMaker("Benjie"); // 'jk2'는 'playerMaker' 함수를 호출하여 생성된 'Player' 타입의 객체입니다.
jk2.age = 12;                    // 'jk2' 객체의 선택적 프로퍼티 'age'에 값을 설정합니다.

// 이때 만약 playerMaker에 대해서 Player의 타입으로 객체를 변환하지 않는다면 'jk2.age'에 대해서 컴파일 에러가 뜬다.

 

readonly

readonly을 통해 아래 코드 사진과 같이 객체의 프로퍼티를 읽기 전용으로 만들어 수정할 수 없도록 설정하여 데이터의 무결성을 유지하고, 의도하지 않은 수정으로부터 객체를 보호할 수 있다. 

readonly 예시
JS 환경에서는 없는 기능으로, readonly 객체를 수정하려고 할 때 JS에서는 컴파일 에러가 뜨지 않는다.

 

Tuple

Tuple고정된 개수의 요소를 가지며, 각 요소의 타입이 미리 정의된 배열을 말한다. 튜플을 사용하면 배열의 요소 타입과 개수를 엄격히 지정할 수 있어, 데이터 구조를 더 명확하게 표현할 수 있다.  또한 readonly를 통해 읽기 전용으로 설정할 수 있다. 

해당 인덱스에 맞지 않는 타입을 설정할 경우 컴파일 에러가 뜬다.
Tuple 예시 코드 - readonly
readonly로 배열의 수정을 막을 수 있다.

 

any & unknown

any

any 타입은 모든 타입의 값을 허용하는 특수 타입을 말한다. any 타입을 사용하면 해당 변수에 어떤 종류의 값도 할당할 수 있으며, 타입 검사기가 해당 변수에 대한 타입 검사를 수행하지 않게된다. 이는 TypeScript의 타입 안전성을 무효화 것이기 때문에, 일반적으로는 필요한 경우에만 사용해야 한다. 

any 예시
a와 b에 대하여 any를 설정할 경우 컴파일 에러가 뜨지 않게 된다.

 

 

unknown

unknown 타입은 TypeScript에서 모든 타입을 나타낼 수 있는 타입으로, any와 유사하지만 더 안전하게 사용할 수 있다. unknown 타입의 변수는 타입이 확인되기 전까지는 사용할 수 없기 때문에, 안전한 타입 검사를 요구해야하며, 이는 코드의 타입 안전성을 높여주며, any 타입보다 더 안전한 대안으로 사용될 수 있다. 

type을 검사하기 전까지는 함부로 변수를 사용할 수 없다.

 

never

never 타입은 어떤 값도 가질 수 없는 타입을 의미하며 이는 함수가 정상적으로 끝나지 않거나, 절대 반환되지 않는 상황을 나타낼 때 사용된다. 주로 함수가 예외를 던지거나, 무한 루프에 빠지는 경우에 사용됩니다. 

never 코드 예시
void에 never을 설정할 경우 return을 할 수 없다.

function hello(name: string | number) {
    if (typeof name === "string") {
        name; // name은 여기서 string 타입
    } else if (typeof name === "number") {
        name; // name은 여기서 number 타입
    } else {
        name; // 여기서 name은 never 타입
    }
}
반응형