*react에서 설치할때와는 다름!
[typescript 설치셋팅]
cd my-app
npm install -g typescript
//보안에러 뜨면
sudo npm install -g typescript
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
}
}
// 추가로 넣을 만한 것들
// noImplicitAny는 any라는 타입이 의도치않게 발생할 경우 에러를 띄워주는 설정
// strictNullChecks는 null, undefined 타입에 이상한 조작하면 에러를 띄우는 설정
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": true,
"strictNullChecks": true
}
}
tsc -w
[React 프로젝트에서 Typescript 사용할 경우]
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
npx create-react-app my-app --template typescript
[typescript 사용법 정리]
let 이름 :string = 'kim'
let 이름 :string[] = ['kim', 'cho']
//'이 변수에는 스트링이 담긴 배열만 올 수 있습니다' 라는 뜻
let 이름 :{ name?: string } = {name: 'kim'}
//?를 붙이면, name속성은 옵션이라는 뜻
let 이름 :string | number = 'kim';
//다양한 타입이 들어올 수 있게 하려면 union type
type NameType = string | number;
let 이름 :NameType = 'kim';
//type 키워드를 이용해 타입을 변수처럼 담아서 사용 가능
//type명은 보통 대문자로 사용하여, 일반 변수와 구분
type NameType = 'kim' | 'park;
let 이름 :NameType = 'kim';
//string number 이런 것 뿐만 아니라 나만의 타입을 만들어 사용 가능
//원하는 글자나 숫자를 입력하면 이름이라는 변수엔 앞으로 'kim' 또'park'만 들어올 수 있음
//literal type이라 부름
function 함수명(x :number) :number{
return x * 2
}
//타입스크립트는 지금 변수의 타입이 확실하지 않으면 마음대로 연산할 수 없음
//항상 타입이 무엇인지 미리 체크하는 narrowing 또는 assertion 문법을 사용해야 허락해줌
//에러
function 함수명(x :number | string) {
return x * 2
}
//가능
function 함수명(x :number | string) {
if (typeof x === 'number'){
return x * 2
}
}
type Member = [number, boolean];
let john:Member = [100, false]
//문자만 담긴 array가 와야한다는 뜻
let name :string[] = ['sujin','jun']
//name?는 name 속성이 있어도 되고, 없어도 된다는 뜻
type MyObject = {
name? : string,
age : number
}
let 철수 :MyObject = {
name : 'kim',
age : 50
}
//object안에 어떤 속성이 들어갈지 아직 모른다면 그냥 전체타입지정도 가능
//index signature라고 합니다.
type MyObject = {
[key :string] : number,
}
let 철수 :MyObject = {
age : 50,
weight : 100,
}
let 팀원들 :(number | string)[] = [1, '2', 3]
let 오브젝트 :{a: number | string } = {a: '오브젝트'}
class Person {
name;
constructor(name :string){
this.name = name;
}
}
let 이름 :any;
이름 = 123;
이름 = true;
//unknown
let 이름 :unknown
이름 = {}
let 변수1 :string = 이름 //쉴드쳐줌. 오류가남
//any
let 이름 :any
이름 = {}
let 변수1 :string = 이름 //쉴드 벗겨짐. 오류안남
//unknown
let 이름 :unknown
이름 - 1 //오류남
//any
let 이름 :any
이름 - 1 //오류안남
string 타입 + 1 (허용)
number 타입 + 1 (허용)
struing | number 타입 + 1 (X) -새로운 타입이니까.