오늘은 typescript에 대해서 정리한다!
타입 스크립트는 개발자 설문조사에서 가장 좋아하고 관심있는 프로그래밍 언어 2위에 올랐다.
Typescript는 javascript 기반으로 하는 오픈소스 언어이다.
Typescript는 자신이 원하는 타입을 정의하고 프로그래밍 하면 javascript로 컴파일되어 실행된다.
Javascript 엔진을 사용하고 큰 어플리케이션을 개발할 수 있는 언어이다.
Javascript로 작성한 프로그램도 typescript 프로그램으로도 동작한다.
정적타입언어의 특징같이 미리 타입을 결정하기 때문에 실행속도가 매우 빠르다.
하지만 타입을 적기 때문에 코드량이 늘어나고 번거로우며 컴파일 시간이 오래 걸린다.
자바스크립트 슈퍼셋
자바스크립트 기본 문법에 타입스크립트의 문법을 추가한 언어이다.
자바스크립트로 작송된 프로그램도 타입스크립트 프로그램으로 실행가능하다.
객체 지향 프로그래밍 지원
타입스크립트는 ES6 문법을 포함하고 클래스, 인터페이스, 상속, 모듈 같은 객체 지향 프로그래밍 패턴을 제공한다.
높은 수준의 코드 탐색과 디버깅
타입스크립트는 타입을 적는 정적타입언어로 코드의 목적을 나타낸다. 변수나 함수에 에러를 발생시켜서 사전에 버그를 제거한다. 자동완성이나 실행 전 피드백을 주기 때문에 작업과 동시에 디버깅이 가능하다.
자바스크립트 호환
타입스크립트는 자바스크립트와 100% 호환이 가능하다. 자바스크립트는 프론트엔드 뿐만 아니라 백엔드에서도 사용이 가능하다. 타입스크립트도 자바스크립트가 사용할 수 있는 곳이라면 동일한 용도로 쓸 수 있다. 서버에서 개발이 이루어지는 복잡하고 큰 프로젝트에 딱 맞는다.
강력한 생태계
타입스크립트는 나온지 오래된 언어가 아니지만 강력한 생태계를 가지고 있다. 대부분의 라이브러리가 지원하고 vscode 등 다양한 에디터에서 타입스크립트 관련 기능과 플러그인을 지원한다.
규모가 크고 복잡한 프로그램, 유지보수가 중요한 장기 프로젝트에서 빛을 낸다.
React
리액트와 타입스크립트의 호환성은 매우 좋다. 많은 개발자들이 최근에 리액트와 타입스크립트 조합을 찾는다. 리액트 웹 개발용 보일러 플레이트인 CRA(create-react-app) 에서 간단한 옵션 추가로 타입스크립트를 사용할 수 있다.
Vue
최신 릴리즈된 뷰 3.0부터 타입스크립트를 지원한다.
뷰3.0 CLI는 타입스크립트 도구화 지원을 기본으로 제공한다.
Angular
버전2부터 타입스크립트 기반으로 만들어졌고 권장하고 있다.
유효한 자바스크립트는 유효한 타입스크립트이다. 타입스크립트는 변수를 명시하지 않아도 최선을 다해 타입을 추론한다.
{
"Javascript.implicitProjectConfig.checkJs": true
}
타입이 안전하지 않는 코드에는 에디터에서 에러를 표시한다. 코드에는 영향을 주지 않는다. 타입스크립트를 선택적으로 비활성화 할 수 있다.
@ts-ignore (해당 줄)
@ts-nocheck (전체)
// tsconfig.json
{
"compilerOptions": {
"allowJs": true // 타입스크립트 컴파일러를 통해 실행할 자바스크립트 파일을 선택
"checkJs": false // 자바스크립트 파일의 타입을 체크
"outDir": "./dist"
"rootDir": "./src"
"strict": false
}
}
타입스크립트 컴파일러를 실행하고 자바스크립트를 확인한다.
"checkJs": true로 타입체크를 진행한다.
타입스크립트 파일로 변환
자바스크립트 파일에서 타입을 확인한 뒤 타입스크립트 파일로 변경한다. allowJS를 활성화했으므로 점진적으로 변경해도 된다. 이미 자바스크립트 코드를 체크했기 때문에 변경사항이 적을 것이다.
엄격한 타입 체크
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true
}
let str: string = 'hi'
let num: number = 100
let arr: Array = [1,2,3]
let arr2: number[]=[1,2,3]
let obj:object = {}
let obj2:{name:string, age:number}={
name:'lee',
age:24
};
function Add(a:number, b:number){
return a+b
}
function log(a:string, b?:string, c?:string){
console.log(a)
}
var arr:[string,number] = ['aa',100]
enum Shoes{
Nike='나이키',
Adidas="아디다스"
}
인터페이스는 타입을 정의한 규칙이다. 일반적으로 타입 체크를 위해 사용된다. 함수, 변수, 클래스에서 사용한다.
interface User{
age:number;
name:string;
}
var person:User = {
age:30,
name:'kim'
}
function getUser(user:User){
console.log(user)
}
interface StringArray{
[index:number]:string
}
var arr2:StringArray = ['a','b','c']
arr[0]=10 //error
interface StringRegexDictionary{
[key:string]:RegExp
}
var obj:StringRegexDictionary={
cssFile:/\.css$/,
jsFile:'a' //Error
}
obj['cssFile'] = /\.css$/
obj['jsFile'] = 'a' //Error
interface Person{
name:string;
age:number;
}
interface User extends Person{
language:string;
}
function askSomeone(someone:Developer2|Person){
console.log(someone)
}
function askSomeone(someone:Developer2&Person){
console.log(someone)
}
여러가지 타입에서 동작하는 컴포넌트를 만들 때 사용한다. 타입을 함수의 파라미터같이 사용한다.
function logText(text: T):T{
return text;
}
logText<string>('aa');
logText<number>(100);
타입스크립트가 코드를 해석하는 과정이다.
var arr = [1,2,true]
타입은 Number|Boolean이 된다.
interface Dropdown{
value:T,
text:'String'
}
var items : Dropdown<boolean>{
value:true,
text:'aa'
}
타입스크립트가 해석하는 것보다 개발자가 코드에 확실한 목적으로 타입을 지정하는 것이다.
var a;
a=10;
a='string';
var b = a as string;
주로 Dom API 조작에서 많이 사용한다.
특정 타입이 다른 타입에 잘 호환되는지를 의미한다.
interface Developer{
name:string;
age:string;
}
interface Person{
name:string;
}
var developer : Developer;
var person : Person;
developer = person //error
person = developer;
활용도가 높아지는 웹 프론트엔드 언어, 타입스크립트(TypeScript)
TypeScript - Interface
타입스크립트 - 위키백과