npm i
설치settings.json
파일을 생성한뒤 아래와 같은 설정을 추가해줬다.{
"eslint.workingDirectories" : [
{ "mode" : "auto" }
]
}
Delte `CR` eslint(prettier/prettier)
타입스크립트 설정파일tsconfig.json
에서 "noImplicitAny"
의 설정을 true로 변경
변경해주면 타입을 설정해주지 않은 변수들에서 빨간줄이 표시된다.
any
란? string
, number
, array
등 모든 타입을 통칭한다.
일종의 치트키 같은 것. 자바스크립트 원래 성질인 실행하는 시점에 타입을 구분한뒤 타입을 할당해주는 관점에서 any
와 비슷하다고 생각할 수 있다.
처음에 타입을 정의할때 any
타입으로 먼저 지정하고 차근차근 구체적인 타입으로 정의해 나가는게 정상적인 방법
- 프로젝트시에는 any가 아니라 구체적으로 타입을 지정하는 방법을 권장
- but 타입을 잘 모르겠다면 any라도 붙여주자
void
란 함수의 반환 타입이 없다는 것을 명시적으로 지적해주는 것.
리턴값이 없는 함수들 같은 경우에는 void
를 추가해준다.
function addTodo(todo): void {}
[{ 객체 }]
const todos = [
{ id: 1, title: '안녕', done: false },
{ id: 2, title: '타입', done: false },
{ id: 3, title: '스크립트', done: false },
]
let todoItems: object[];
filter
란특정 조건에 해당하는 아이템만 필터링해주는 api
const arr = [
{ gender: 'male', name: 'john' },
{ gender: 'female', name: 'sarah' },
{ gender: 'male', name: 'bone' },
];
const filtered = arr.filter(function (item) {
if (item.gender === 'female') {
return item;
}
});
console.log(filtered);
$ node filter.js
[ { gender: 'female', name: 'sarah' } ]
function addTwoTodoItems(): void {
addTodo(); // 타입스크립트 상에서 인자값을 전달해주지 않아서 에러 발생
}
타입스크립트에서 에러의 원인을 알지 못했을때 마우스오버했을때 나오는 알림창을 읽어보면 원인을 파악할 수 있다.
오른쪽에 나오는 (ts2399)
라는 error code로 구글링하면 자세한 자료를 찾을 수 있다.
function completeTodo(index: number, todo: object): void {
todo.done = true; // 오류난 부분
todoItems.splice(index, 1, todo);
}
'object' 형식에 'done' 속성이 없습니다.
라는 에러메세지의 의미는
- todo라는 파라미터의 타입이 object정의해줬기 때문에 object안에 'done' 이 있다는 것이 보장되지 않고 있다.
- 때문에 객체 형식안에서의 각 속성들을 구체적으로 정의해줘야 한다.
배열 안에 객체에 대한 구체적인 타입 정의
let todoItems: { id: number; title: string; done: boolean }[];
1.
function addTodo(todo: { id: number; title: string; done: boolean }): void {}
2.
function completeTodo(
index: number,
todo: { id: number; title: string; done: boolean }
): void {}
타입스크립트라는것은 어려운 개념이 아니라 자바스크립트의 타입을 명확하게 명시적으로 지정해준다라고 이해하면 된다.
interface
를 이용해서 중복되는 타입을 간결하게 정의한다.// 변수에 인터페이스 활용
interface Todo {
id: number;
title: string;
done: boolean;
}
let todoItems: Todo[];