본문 바로가기

TYPE SCRIPT

[TYPE SCRIPT] 기본 타입

Number

const num: number = 1;

 

String

const str: string = 'hello world';

 

Array

const numbers: number[] = [1, 2, 3];
const numbers2: Array<number> = [1, 2, 3];

function printArray(array: readonly number[]){}; // ⭕
function printArray2(array: readonly Array<number>){}; // ❌
array 타입은 두 가지 형태로 나타낼 수 있는데, readonly 속성을 할당해 줄 땐 Array<number> 방식은 에러가 발생한다.
readonly는 자주 쓰이기 때문에 좀 더 일관성 있는 코드를 작성하려면 첫 번째 방식을 추천한다.

 

Boolean

const boal: boolean = true; // or false

 

Undefined

const und: undefined; // ❌
let age: number | undefined; // Union Type
age = 20;
age = undefined;

function find(): number | undefined {
  return 100;
  // return undefined;
}

 

Null

let person: null; // ❌
let person2: string | null;
person2 = 'Mike';
person2 = null;

 

Undefined 와 Null 차이

let name;
console.log(name); // undefined

let age = null;
console.log(age); // null
undefined - 변수 선언 후 값을 할당하지 않은 상태 (사전적 의미 : 한정되지 않은, 확실하지 않은)
null - 의도적으로 빈 값을 할당

 

Unknown

let notSure: unknown; // ❌
notSure = 'a';
notSure = 12;
return 되는 타입을 모를 때 사용, but 가능하면 쓰지 않는 것이 좋다.

 

Any

let anything: any = 1; // ❌❌❌
anything = 'hi';
anything = false;
unknown과 마찬가지로 가능하면 쓰지 않는 것이 좋다.

 

Void

function print(): void {
  console.log('hi');
  // return 생략
}

let unusable: void = undefined; // ❌
되도록이면 타입을 명시해 주는 것이 좋지만, 생략할 수 있다.
변수에 선언할 경우 undefined밖에 할당되지 않기 때문에  사용하지 않는다.

 

Never

function throwError(message: string): never {
  // message를 서버에 보내 로그를 남긴 후
  throw new Error(message);
}
함수에서 주로 사용되며 절대로 return 되지 않는다.

 

Object

function object(obj: object){};
object({nmae: 'mike'});
object([1, 2, 3]);
그냥 쓰기보단 object를 더 구체적으로 명시해서 사용하는 것이 좋다.

 

Tuple

let student: [string, number];
student = ['name', 20];
console.log(student[0]); // name
console.log(student[1]); // 20
// 가독성이 좋지 않은 코드.

const student2 = {
  name: string = 'Tom',
  age: number = 20,
};
console.log(student2.name); // Tom
console.log(student2.age); // 20
// student[0]보단 student2.name이 가독성이 훨씬 좋다.

// tuple을 사용하는 대표적인 예
const [count, setCount] = useState(0); // React의 useState hook
 tuple보단 interface, class, type alias로 대체해서 사용하는 것이 좋다.

 

Type Aliases ⭐

type Text = string;

const name: string = 'Tom';
const name2: Text = 'cruise';

// 원시 타입뿐만 아니라 object 형태도 정의할 수 있다.
type Student = {
  name: string;
  age: number;
}
const student: Student = {
  name: 'Tom',
  age: 20,
}
alias (사전적 의미 : 별명, 가명)
타입을 재사용하거나 또 다른 이름(별명)으로 부르고 싶을 때, 자유롭게 타입을 지정해서 사용할 수 있다.

 

Union Types ⭐

function printId(id: string | number) {
  console.log(id);
}
printId('my ID'); // ⭕
printId(100); // ⭕

type Grades = 'A' | 'B' | 'C' | 'D' | 'E' | 'F';
let grades: Grades;
grades = 'A'; // ⭕
grades = 'G'; // ❌
쉽게 or로 생각하면 된다. 지정한 원시 타입이나 특정 값만 할당할 수 있다. (A or B or C ...)

 

Literal Types

type Greeting = 'hello!';
type Count = 10;

let greeting: Greeting;
greeting = 'hello!';

let count: Count;
count = 10;

// Union Type과 함께 더 유용하게 사용할 수 있다.
type Direction = 'up' | 'down' | 'left' | 'right';

let direction: Direction;
direction = 'up'; // up, down, left, right 네 가지의 선택지만 할당할 수 있다.
원시 타입 지정 이외에 구체적인 문자열이나 숫자 값을 타입으로 지정할 수 있다.
주로 Union Type과 함께 사용한다.

 

Intersection Types

type Student = {
  name: string;
  score: number;
};

type Worker = {
  employeeId: number;
  work: () => void;
};

function internWork(person: Student & Worker) {
  console.log(person.name, person.score, person.employeeId, person.work());
}

internWork({
  name: 'Tom',
  score: 10,
  employeeId: 1234,
  work: () => {},
});
교차 타입으로 여러 타입을 하나로 결합한다. internWork는 두 타입의 모든 멤버 변수를 가진다.

 

Optional Parameter

function printName(firstName: string, lastName?: string){
  console.log(firstName);
  console.log(lastName);
}
printName('Tom', 'cruise'); // Tom cruise
printName('Tom'); // Tom undefined
printName('Tom', undefined); // Tom undefined

// 비슷하지만 조금은 다른 방식
function printName(firstName: string, lastName: string | undefined){
  console.log(firstName);
  console.log(lastName);
}
printName('Tom', 'cruise'); // Tom cruise
printName('Tom'); // ❌
printName('Tom', undefined); // Tom undefined
두 번째 parameter를 union 타입으로 사용할 경우 string 이나 undefined 둘 중에 하나를 반드시 할당해야 한다.
그러므로 이런 경우엔 굳이 undefined을 전달하지 않아도 되는 optional parameter를 사용하는 것이 좋다.

 

Default Parameter

function printMessage(message: string = 'default message'){
  console.log(message);
}
printMessage(); // default message
함수를 호출할 때 parameter에 값을 할당하지 않으면 기본값인 'default message'가 출력된다.

 

Rest Parameter

function add(...numbers: number[]): number {
  return numbers.reduce((a, b) => a + b);
}
console.log(add(1, 2));
console.log(add(1, 2, 3, 4, 5));
원하는 만큼 parameter 개수를 조절할 수 있다.

 

'TYPE SCRIPT' 카테고리의 다른 글

[TYPE SCRIPT] TS + OOP 연습하기  (0) 2022.07.12
[TYPE SCRIPT] 타입 스크립트란  (0) 2022.06.16