인터페이스는 상호 간에 정의한 약속 혹은 규칙을 의미한다. 타입스크립트에서는 아래와 같은 약속들은 정의한다.
let users:object;
users={
name : '이진경',
age : 37
}
console.log(users.name) //오류 발생
object
에는 특정 속성값에 대한 정보가 없기 때문에 위처럼 객체 안에 접근은 불가능하다.
객체 안에 접근하기 위해서는 interface
를 사용해야 한다.
interface User{
name : string,
age: number
}
let user : User={
name : '이진경',
age : 37,
}
//같은 타입으로 값 변경은 ok
user.age = 10
console.log(user.age) // 10
인터페이스를 사용할 때 인터페이스에 정의되어 있는 속성을 모두 다 사용하지 않아도 된다.
interface 인터페이스의 이름{
속성? : 타입;
}
⭐️ 이렇게 속성의 끝에 ?
를 붙이면 가능하다.
interface User{
name : string,
age: number,
gender? :string
//입력을 해도되고 안해도되는건 ?로 표현
}
let user : User={
name : '이진경',
age : 37
}
//같은 타입으로 값 변경은 ok
user.age = 10
user.gender = "male"
interface 인터페이스의 이름{
readonly 속성 : 타입;
}
⭐️ 인터페이스로 객체를 선언하고 나서 수정하려고 하면 오류를 발생시킨다! (const
와 같은 기능)
interface User{
name : string,
age: number,
gender? :string
//입력을 해도되고 안해도되는건 ?로 표현
readonly birthYear :number
//읽기기능만 적용시키고 싶을때
}
let user : User={
name : '이진경',
age : 37,
birthYear : 2000,
}
//같은 타입으로 값 변경은 ok
user.age = 10
user.gender = "male"
user.birthYear = 1997 //오류발생
배열을 선언할 때 ReadonlyArray<T>
타입을 사용하면 읽기 전용 배열을 생성할 수 있다.
let arr: ReadonlyArray<number> = [1, 2, 3]
⭐️ 이것 또한 선언하고 나서 수정은 불가능하다.
type Score = 'A' | 'B' | 'C' | 'F'
interface User{
name : string,
age: number,
gender? :string
//입력을 해도되고 안해도되는건 ?로 표현
readonly birthYear :number
//읽기기능만 적용시키고 싶을때
[grade : number] : Score
//문자열 index 설정
}
let user : User={
name : '이진경',
age : 37,
birthYear : 2000,
1 : 'A'
2: 'b' //오류발생
}
⭐️ [grade : number]로 index를 지정할 수 있게 설정한 후 값으로는 지정한 배열만 입력할 수 있게 지정한다.
(숫자 더하기)
interface Add {
(num1:number, num2:number) :number
}
const add :Add = function(x,y){
return x + y;
}
add(10, 20)
(성인인지 확인)
interface isAdult {
(age :number):boolean
}
const a:isAdult =(age) =>{
return age>19;
}
a(33)