https://www.typescriptlang.org/docs/handbook/basic-types.html
true/false의 값을 가짐
숫자, floating point나 BigInteger와 같은 숫자들도 포함
BigInteger는 bigint 타입을 가짐
문자열
쌍따옴표(")나 따옴표(')를 사용하여 표기
templete string: 역따옴표(`)를 사용하여 표기, 여러 줄과 ${expr}로 변수를 나타낼 수 있음
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
I'll be ${age + 1} years old next month.`;
아래 두 가지 방법으로 선언할 수 있음
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
각 element의 타입과 element의 수가 지정되어있는 array
let x: [string, number];
여러 개의 데이터를 한 묶음으로 모음
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green;
변수가 어떤 타입이든 될 수 있음을 나타냄
typeof 이나 비교를 통해 unknown 변수의 타입을 확인할 수 있음
let maybe: unknown;
// 'maybe' could be a string, object, boolean, undefined, or other types
if (maybe === true){ ... }
if (typeof maybe === "string") { ... }
변수의 타입 검사를 진행하지 않아 any 타입의 변수로는 모든 것이 가능함
unknown과 다르게 임의의 property나 method가 존재하는지, 혹은 타입이 정확한지 확인하지 않고 허락함
Any를 남용하면 type saftey를 해칠 위험이 있음
let looselyTyped: any = 4;
// OK, ifItExists might exist at runtime
looselyTyped.ifItExists();
// OK, toFixed exists (but the compiler doesn't check)
looselyTyped.toFixed();
어떤 타입도 가지고 있지 않음, any의 반대라고 생각해도 됨
void에는 null이나 undefined만 할당할 수 있음
모든 다른 타입들의 subtype이기 때문에 number와 같은 타입에 null이나 undefined를 할당할 수 있음
절대로 발생하지 않을 값의 타입
ex) 항상 에러를 던지거나 절대 return하지 않는 함수의 타입이 될 수 있다.
never는 모든 타입의 subtype이고 모든 타입에 대입할 수 있지만, 어떤 타입도 never의 subtype이거나 대입할 수 없다. 심지어 any도!
// Function returning never must not have a reachable end point
function error(message: string): never {
throw new Error(message);
}
// Inferred return type is never
function fail() {
return error("Something failed");
}
// Function returning never must not have a reachable end point
function infiniteLoop(): never {
while (true) {}
}
Non-primitive type을 의미함, 여러 primitive type 변수가 합쳐진 거라고 생각하면 편함 (primitive type: string, number와 같은 가장 원초적인 타입)
let x = {name: string, weight: number};
컴파일러에게 이 변수가 어떤 타입이라고 주장하는 것(알려주는 것). type casting과 비슷하다.
as 또는 <> 를 사용함
let someValue: unknown = "this is a string";
let strLength1: number = (someValue as string).length;
let strLength2: number = (<string>someValue).length;
TS에서
Array<datatype>
와datatype[]
의 두가지 방법으로 배열을 선언할 수 있는데, 이 두가지 선언방식이 완전히 똑같이 동작할까요? (예전에 뭔가 둘이 다르게 동작해서 찾아봤던거 같은데 기억이 안나네요) 혹시 해당 사항 관련해서 뭔가 있을까요..?