코드를 읽고 모든 타입과 값을 이해 → 초기 선언의 타입 확인 → 값의 추후 사용 방법 확인 → 불일치 시 오류 표시.
let firstNumber = 3;
firstNumber.length; // Error: Type 'Number' has np call...
// 1. 변수값이 3이므로 타입을 number로 판단
// 2. number에서는 length가 사용불가하므로 오류
위의 예시에서는 firstNumber의 타입이 number로 초기 지정되었으나 number 속성이 아닌 length 속성을 이용하므로 에러가 발생한다.
let fistName = "kim";
firstName = "Tom";
firstName = true; //error
할당가능성 : 타입에 맞게 값을 할당할 수 있는지 확인하는 것이다.
위의 예시에서는 firstName의 타입이 string으로 초기 지정되었으므로 boolean타입인 true로 재할당하려고 하니 에러가 발생한다. 할당가능성을 확인했으나 불가하므로 에러가 발생한다.
객체의 경우 속성별로 타입을 체크한다.let xUser = { id: number, password: string };:를 이용하여 표기한다. let을 사용하여 선언하는 경우 타입은 초기값이 지정되고 값은 타입과 일치하면 계속 변할 수 있지만, const을 사용하여 선언하는 경우 타입은 상수로 고정된다. (객체의 경우, 값은 타입과 일치하면 속성에 접근하여 변경할 수 있다.) let ch : string;
ch= "123"
ch = "asdf"
const ch2 : string;
ch2 = "123" // Cannot assign to 'ch2' because it is a constant.
ch = "asdf"
const ch3 : string = "kim"
ch3 = "lee" // Cannot assign to 'ch3' because it is a constant.
const ch4 = { name : 'j', age:3 }
ch4.name = 'k' //ok
ch4 = {name : 'l', age: 2} // Cannot assign to 'ch4' because it is a constant.
type personInfo = { id: number; name: string; age: number };
const some = ({ id, name, age }: personInfo) => {};
id가 number, name이 string, age가 number인 personInfo를 타입으로 별칭한다.
함수 some에서 personInfo를 타입으로 하는 props 매개변수를 받는다.
기본타입 : string, number, bigint, boolean, object, symbol, null, undefined
조합타입 : 유니언, 리터럴, 교차타입
확장타입 : any, void, never
any
모든 타입의 상위타입으로 어떠한 타입의 값도 할당할 수 있다. 변수선언시 초기값, 초기타입을 모두 지정하지 않으면 디폴트로 type이 any로 설정된다. 이러한 경우,any의 진화라는 타입이 계속 변화하는 상태가 발생할 수 있으니 주의해야한다.진화하는 any? 🔍
let firstName; firstName = "Tom"; firstName = true;
구조화 타입: 배열, 튜플, 클래스, 인터페이스
튜플과 배열
선언시 튜플은 길이가 고정되어 있고 각 요소마다 다른 타입을 가지나, 배열은 길이가 비고정되어 있고 각 요소가 동일한 타입을 가진다.
true로 지정할 시, null/undefined임을 명시해야 null/undefined임을 취급하는 것이다. false로 지정할 시, null/undefined를 default로 취급한다. // true
let myVar: string;
myVar = "Hello"; // 이 코드는 정상
myVar = null; // 오류: Type 'null' is not assignable to type 'string'
//false
let myVar: string;
myVar = "Hello"; // 이 코드는 정상
myVar = null; // 이 코드는 정상, 에러 발생하지 않음