happy coding

[type script] 기본 타입 본문

self study/언어의 기본부터

[type script] 기본 타입

yeoonii 2024. 5. 1. 21:59

1. 불리언

2. 숫자

3. 문자열 (string) : 큰따옴표 또는 작은따옴표

- 템플릿 문자열 : 여러 줄에 걸쳐 문자열 작성 또는 표현식 포함시키도록 하는데, 이 문자열은 백틱/백쿼트(`)으로 감싸지며, ${ expr }와 같은 형태로 표현식을 포함시킬 수 있다.

let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.

 

4. 배열 (array) : 값들을 배열로 다룰 수 있도록 해준다.

두 가지 방법 (1) 배열 요소들을 나타내는 타입 뒤에 [] 를 사용하는 것, (2) 제네릭 배열 타입을 사용하는 것이다. 

let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];

 

5. 튜플 (tuple) : 요소의 타입과 개수가 고정된 배열을 표현할 수 있다.

하지만 요소들의 타입이 모두 같을 필요는 없다.

// 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 성공
// 잘못된 초기화
x = [10, "hello"]; // 오류

정해진 인덱스에 위치한 요소에 접근하면 해당 타입이 나타나지만, 이외에 다른 인덱스에 있는 요소에 접근하면 오류가 발생하며 실패한다.

console.log(x[0].substring(1)); // 성공
console.log(x[1].substring(1)); // 오류, 'number'에는 'substring' 이 없습니다.

x[3] = "world"; // 오류, '[string, number]' 타입에는 프로퍼티 '3'이 없습니다.
console.log(x[5].toString()); // '[string, number]' 타입에는 프로퍼티 '5'가 없습니다.

 

6. 열거 (enum)

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

모든 값을 수동으로 설정할 수 있고, 멤버 중 하나의 값을 수동으로 설정해서 번호를 바꿀 수 있다.(0부터 시작해서 번호를 매기지만)

유용한 기능 중 하나는 매겨진 값을 사용해 enum 멤버의 이름을 알아낼 수 있다는 점이다.

 

7. any : 알지 못하는 타입을 표현해야 할 수 있을 때 사용하는 타입이다.

당장 타입 검사를 하지 않고,  그 값들이 컴파일 시간에 검사를 통과하길 원할 때 사용한다.

Object와 다른 점 : object로 선언된 변수들은 오직 어떤 값이든 그 변수에 할당할 수 있게 해주지만 실제로 메서드가 존재하더라도, 임의로 호출할 수 없다. 

let notSure: any = 4;
notSure.ifItExists(); // 성공, ifItExists 는 런타임엔 존재할 것입니다.
notSure.toFixed(); // 성공, toFixed는 존재합니다. (하지만 컴파일러는 검사하지 않음)

let prettySure: Object = 4;
prettySure.toFixed(); // 오류: 프로퍼티 'toFixed'는 'Object'에 존재하지 않습니다.

 

위 예시 코드를 보면,
첫번째 notSure에서는, any는 어떠한 타입도 가능하기 때문에 해당 값에 대해 어떤 메서드나 프로퍼티도 호출할 수 있다. any
타입에 대해서는 컴파일러가 거의 모든 종류의 검사를 수행하지 않으므로, 프로퍼티나 메서드가 존재하는지 여부를 확인하지 않는다.
두번째 prettySure에서는, prettySure변수가 Object타입으로 선언되었고, Object타입에는 toFixed() 메서드가 존재하지 않기 때문에 오류가 발생한다.

핸드북에서는 "Object를 no-primitive object 대신에 사용하지 마세요."라고 말하고 있다.

또한, any 타입은 타입의 일부만 알고 전체는 알지 못할 때 유용하기 때문에 여러 타입이 섞인 배열을 다룰 수 있다.

 

8. void : 어떤 타입도 존재할 수 없음을 나타내기 때문에, any의 반대 타입과 같다고 할 수 있다.

보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰인다.

function warnUser(): void {
    console.log("This is my warning message");
}

하지만 여기서 void를 타입 변수로 선언하는 것은 알맞지 않은데, 그 변수에는 null 또는 undefined만 할당할 수 있기 때문이다.

 

9. null and undefined : 그 자체가 자신의 타입이다.

let u: undefined = undefined;
let n: null = null;

기본적으로 null 과 undefined는 다른 모든 타입의 하위 타입이기에, number 같은 타입에 할당할 수 있다.

하지만, --strictNullChecks 를 사용하면 null과 undefined는 오직 any와 각자 자신들 타입에만 할당이 가능하다.

 

10. never : 절대 발생할 수 없는 타입을 나타낸다.

변수 또는 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never 타입을 얻게 될 수 있다. never 타입 또한, 모든 타입에 할당 가능한 하위 타입이지만 어떤 타입도 never에 할당할 수 있거나, 하위 타입이 아니다.(심지어 any도)

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
    throw new Error(message);
}

// 반환 타입이 never로 추론된다.
function fail() {
    return error("Something failed");
}

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function infiniteLoop(): never {
    while (true) {
    }
}

 

11. 객체(object) : 원시 타입이 아닌 타입이다. 

declare function create(o: object | null): void;

create({ prop: 0 }); // 성공
create(null); // 성공

create(42); // 오류
create("string"); // 오류
create(false); // 오류
create(undefined); // 오류
create라는 함수는 매개변수는 object 또는 null을 받고 반환값이 없다(void).
{prop:0}이라는 객체를 받거나, null을 받은 경우 "성공"
나머지(number, string, boolean, undefined)를 받는 경우 "오류"

 

12. 타입 단언(type assertions) : 개발자가 type script보다 더 잘 알 경우를 대비해서

(어떤 엔터티의 실제 타입이 현재 타입보다 더 구체적일 때), 다른 언어의 타입 변환과 유사하지만 다른 특별한 검사를 하거나 데이터를 재구성하지는 않는다. 런타임에 영향을 미치지 않고, 온전히 컴파일러만 이를 사용한다.

(1) angle-bracket

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

(2) as

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

 

'self study > 언어의 기본부터' 카테고리의 다른 글

[type script] 인터페이스  (0) 2024.05.01
[java] 입출력  (0) 2023.07.21
[python] 입출력함수와 주석  (1) 2022.12.24
[python] python에 대해  (0) 2022.12.24
[c] 실수의 표현  (1) 2022.11.30
Comments