1 | let v1 = 123; |
타입스크립트에서 위와같이 선언시 두 번째 v1은 타입 에러가 발생합니다. 이는 첫 번째 할당 시 문자열이 아닌 숫자가 변수에 담겨서 입니다. 이것을 타입추론(type inference)이라고 합니다. 두 가지 모두 변수에 담기 위해서는 두 가지 타입을 명시해줘야 합니다.
1 | let v1: number | string = 123; |
이처럼 타입스크립트에서는 여러 가지 타입을 정의할 수 있습니다. any 타입은 모든 종류의 값을 허용합니다.
1 | const values: number[] = [1, 2, 3]; |
열거형 타입
1 | enum Fruit { |
열거형 타입은 객체이며, 각 원소는 값으로 사용될 수 있고, 타입으로 사용될 수도 있습니다. 상수 열겨형 타입을 사용할 경우 컴파일 후에도 남아 있지 않습니다.
함수 타입
1 | function getInfoText(name: string, age: number): string { |
함수 타입을 정의하기 위해서는 매개변수 타입과 반환 타입이 필요합니다.
인터페이스
자바에서의 인터페이스는 클래스를 구현하기 전에 필요한 메서드를 정의하는 용도로 사용됩니다. 타입스크립트에서는 좀 더 다양한 기능을 가지고 있습니다. 인터페이스로 객체 타입을 정의하는 것을 알아보도록 하겠습니다.
1 | interface Person { |
Person 인터페이스에서 하나 이상의 속성 타입을 만족하지 못하면 타입 에러가 발생합니다. 선택속성을 추가하려면 ? 기호를 사용해야합니다. 읽기 전용일 경우 readonly를 추가하면 됩니다. 정의되지 않은 속성값을 할당할 경우 타입 에러가 발생합니다.
1 | interface Person { |
제네릭
1 | function makeArray<T>(defaultValue: T, size: number): T[] { |
제네릭은 타입 정보가 동적으로 결정되며, 같은 규칙을 여러 타입에 적용할 수 있습니다.
함수형 컴포넌트의 타입 정의하기
1 | import React from 'react'; |
클래스형 컴포넌트의 타입 정의하기1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42import React, { createRef } from 'react';
interface Props {
containerStyle: React.CSSProperties;
theme: string;
}
const defaultProps = {
theme: 'dark',
}
interface State {
name: string;
age: number | undefined;
}
class MyComponent extends React.Component<Props, State> {
state = {
name: 'mike',
age: undefined,
};
static defaultProps = defaultProps;
pRef = createRef<HTMLParagraphElement>();
onClick1 = (e: EventObject) => {
console.log(e.currentTarget.dataset['food']);
};
onClick2 = (e: React.MouseEvent<HTMLButtonElement>) => {
console.log(`${e.clientX}, ${e.clientY}`);
};
render() {
const { containerStyle, theme } = this.props;
const { name, age } = this.state;
return (
<div style={containerStyle}>
<p ref={this.pRef}>{name}</p>
<button data-foold="soup" onClick={this.onClick1}>버튼1</button>
<button onClick={this.onClick2}>버튼2</button>
</div>
)
}
}
참고링크