타입스크립트는 타입의 표기가 없는 경우 코드를 분석 하여 타입을 유추한다.
<script>
let a = 5;
a = "hello";
</script>
a라는 변수에 숫자 5가 할당 되어있는데 , a에 "hello"를 넣을려고 하면
타입추론에 의해서 에러가 발생한다.
함수의 return 값도 타입추론이 가능하다.
변수를 선언할 때 변수 값의 타입을 명시함으로써 변수 값의 데이터 타입을 지정
<script>
let x : string;
</script>
함수의 값도 타입명시가 가능하다.
:void
:void 함수는 아무것도 반환하지 않는다고 명시할 때 사용한다.
interface란 상호 간에 정의한 약속 혹은 규칙을 의미한다.
<script>
function logPerson(obj: {name: string}) {
console.log(obj.name);
}
let person = { name: 'yong', age: 24 };
logAge(person);
</script>
<script>
interface person {
name: string,
age: number;
}
function logPerson(obj: person) {
console.log(obj.name);
}
let person = { name: 'yong', age: 24 };
logAge(person);
</script>
logPerson() 의 인자는 person의 타입을 가지도록 한다.
interface에 정의되어 있는 속성중에 꼭 사용하지 않아도 되는 것이 있을 때
? 를 이용해서 사용한다.
<script>
interface person {
name: string,
age?: number;
}
function logPerson(obj: person) {
console.log(obj.name);
}
let person = { name: 'yong'};
logAge(person);
</script>
interface에는 age를 정의 했지만 , 변수에는 age가 들어있지 않다.
이때 age 뒤에 ? 를 붙여주면 있어도 되고 없어도 되는 속성값이 되는 것이다.
인터페이스로 객체를 처음 생성할 때만 값을 할당하고 , 이후에는 변경이 불가능한 속성이다.
<script>
interface person {
readonly name : string;
}
let people: person = {
name: "yong"
}
people.name = "park"; // 에러
</script>
interface로 객체를 선언하고 나서 수정을 하려고 하면 readonly 속성에 의하여 에러가 발생한다.