타입스크립트는 자바스크립트의 상위 집합(superset)으로,
자바스크립트에 정적 타입 시스템을 추가한 언어.
npm install -g typescript
타입스크립트 프로젝트를 시작할 때는 다음 명령어를 실행하여
tsconfig.json 파일을 생성할 수 있습니다
tsc --init
6/30 추가
원시값중 unKnown 은 어떤값이 들어올지 모를때
타입검사후 사용가능 이프문으로 typeof xxx = "타입" 이런식으로
배열명 : 타입[ ] = [ ]
튜플? 타입과순서를 정확히 지정
=>배열 : [string , number] = ["123",123]
유니온? 섞여있는경우 어떻게 순서가 들어올지 모를때
=>배열: (string | number)[ ] = ["123",123 ,123,123,"123",123]
자바스크립트 문법 or =>|| 인데 요기는 한개만 |
객체는 타입추론 알아서해줌 하지만 일단 명시적으로 지정하기로
객체명 : 타입{ 키:타입, 키:타입, 키:타입} = { }
프로퍼티가 많아 질경우 따로 타입알리어스 로 빼줌
type 타입변수명 = { 키:타입; 키:타입; 키:타입}
객체명 : 타입변수명 = { }
interface 타입변수명 { 키:타입; 키:타입; 키:타입 } 도 타입이랑 똑같음 .다만 타입알리어스 좀더 요즘추세
인터페이스는 객체지향적일때 쓰는 class 쓸때
중첩 객체
인터섹션 합칠수있음
type 타입변수명1 = 타입변수명2 & { 프로퍼티 : 타입변수명3 }
=> type 타입변수명1 = {타입변수명2 프로퍼티들 ; 프로퍼티: 타입변수명3}
=> 객채명 : 타입변수명1 ={타입변수명2 프로퍼티들, 프로퍼티: 타입변수명3들 }
함수
함수선언문
function 함수명 (매개변수:타입) : 타입 { }
매개변수 뒤 :타입은 함수의 리턴값 << 없어도 타입추론해주지만 명시하는 습관들이기
자바스크립트에서 리턴키워드 없는 함수는 뭘리턴? 언디파인
하지만 타입스크립트에서는 리턴값이 없는 함수는 void라는 타입을 명시해줌
화살표함수 > 함수표현식 : 값으로 평가되는 문장 , 변수에 담을수있냐없냐
함수명 = ( 매개변수 : 타입) : void => { } or
함수명 : (매개변수 : 타입) => void = (매개변수) => { } or
type 타입명 = (매개변수 : 타입) =>void;
함수명 : 타입명 = (매개변수 ) => { }
async함수 리턴타입 항상프로미스
함수명 = async (): promise<타입[ ]> => { }
타입전용 매개변수 => 제네릭(Generic)
type 타입명 = { value : T }
안의 이름은 자유지만 타입의약자로 t많이씀
안에 문자가 들어오면 벨류도 문자 , 숫자가 들어오면 숫자
type Todo = { }
const getTodos = async (): Promise<Todo[]> => {
const response = await axios.get<Todo[]>("http://localhost:4000/todos");
return response.data;
}
서버로 부터 값을 받아오고 => 타입폴더에 관련 타입파일 생성 => 받아온값을 파일에서 타입정의
=> 특정값이 각각의 데이터에 있기도 하고 없기도 할때 옵셔널체이닝(Optional Chaining) ?
=> 특정값에 뭐가 들어올지 모르는상황 => 인덱스시그니쳐
객체 타입의 모든 프로퍼티가 특정 타입의 키와 특정 타입의 값을 가져야 한다고 명시
type 타입이름= {
};
useState<타입>
axios로 데이터 불러올때
[error,setError] =useState <null | AxiosError>(null)
catch (err){if(err instanceof AxiosError){ setError(err)}else{console.error(err) } }
[data,setData] = useState<Todo[]>([]);
함수컴포넌트의 props만 interface로 정의
함수컴포넌트의 interface 레퍼런스가 훨씬 많음. 객체타읩의 정의만 인터페이스로하고 나머지 타입
interface ChildProps {
message: string;
}
const Child = ({ message }: ChildProps) => {}
event 타입지정
const 함수명 : 함수타입 = (e) =>{ setTitle(e.target.value) }
const 함수명 = (e:매개변수타입):리턴타입 =>{ setTitle(e.target.value) }
event 타입확인은 onChange 에 할당된 이벤트핸들러의 매개변수에 해당하는 event에 마우스오버 시 확인
완료취소 isDone 값없을때 type파일에서 인터섹션으로 추가해줌
type 타입명1 = 합치고자하는타입명 & {isDone:boolean;}; 하고나소 익스포트
서버에서 한번만 값을 가져오고 클라이언트에서 작업
api에서 데이터 받아온걸 맵으로 돌려서 isdone프로퍼티도 추가해줌
ui조작은 타입파일에 추가한걸로 조작