import PropTypes from 'prop-types';
class Greeting extends Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
Greeting.propTypes = {
name: PropTypes.string.isRequired,
};
위 코드처럼 props의 타입을 정의하였으며, prop types를 엄격하게 체크할 경우 isRequired
가 붙지 않은 타음은 다음과 같이 기본 값을 입력해주어야 한다.
import PropTypes from 'prop-types';
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};
Greeting.defaultProps = {
name: 'stranger'
}
// @flow
function square(n: number): number {
return n * n;
}
square("2"); // 에러
// @flow
function foo(x: ?number): string {
if (x) {
return x.toString();
}
return "default string";
}
flow는 자바스크립트의 정적 타입 체커이다.
TypeScript는 마이크로소프트에서 개발한 JavaScript의 상위 집합(Superset) 언어이다.
JavaScript에 정적타입 검사와 클래스 기반 객체 지향 프로그래밍 등의 기능을 추가하여 개발된 언어로, JavaScript가 발전하면서 생긴 단점을 보완하기 위해 등장하였다.
장점
타입스크립트 입문 시 참고하면 좋을 글: 타입스크립트 핸드북
let a:boolean = true;
let b:number = 1;
let c:string = 'a';
let d: string[] = ['a', 'b', 'c'];
let e: Array<string> = ['a', 'b', 'c'];
let f: [string, number, boolean] = ["a", 1, true];
typeof 연산자를 사용했을 때 "object"를 반환하는 모든 타입
let obj: object = {};
key-value를 모를 경우
interface IObj {
[index: string]: string;
}
let obj: IObj = { a: 'a', b: 'b', c: 'c'};
type IObj = {
a: string;
b: string;
c: string;
}
let obj: IObj = { a: 'a', b: 'b', c: 'c'};
어느 타입이든 허용한다는 의미이며, 타입을 엄격하게 체크하지 않아 에러 처리에 조심해야 함
let g: any = 10;
console.log(g.length); // 에러가 나지 않음
조건문을 통해 분기처리해줄 경우 에러가 나지 않음
let h : unknown = 1;
let i : unknown = 'i';
console.log(h.length); // 에러 발생
console.log(i.length); // 에러 발생
변수에는 undefined와 null만 할당하고, 함수에는 반환 값을 설정할 수 없는 타입
let j: void = undefined;
function k(): void {
console.log('k');
}
함수의 끝에 절대 도달하지 않는다는 의미를 지닌 타입입니다.
function neverEnd(): never {
while (true) {
}
}
const add = (x: number, y: number): number => {
return x + y;
}
(x: number, y: number)
: 각 파라미터의 타입: number
: return 하는 값에 대한 타입let addStr = (x: string, y?: string): string => {
return `${x} ${y}`;
}
//정상적으로 작동합니다.
addStr('x');
//정상적으로 작동합니다.
addStr('x', 'y');
//너무 많은 매개변수를 보내 에러가 납니다.
addStr('x', 'y', 'z');
y?: string
: 선택적 매개변수일 경우function sum(a: number, ...nums: number[]): number {
const totalOfNums = 0;
for (let key in nums) {
totalOfNums += nums[key];
}
return a + totalOfNums;
}
둘 이상의 타입을 합쳐서 만들어진 새로운 타입 (| - OR 연산자를 이용한 타입)
특징
function printStr (value: number | string): void {
if (typeof value === 'number') {
console.log(value.toString());
return;
}
console.log(value);
}
둘 이상의 타입을 결합하여 새로운 타입을 만드는 방법 (& - AND 연산자를 이용한 타입)
특징
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer & Person) {
console.log(someone.age);
console.log(someone.name);
console.log(someone.skill);
}