Stack/TypeScript

[TS] Interface 함수

7ingout 2022. 7. 26. 10:47

interface

타입스크립트 여러 객체를 정의하는 일종의 규칙, 구조

 

interface IUser {

                readonly name: string,   // readonly: 할당은 가능하지만 수정은 불가

                age: number,

                isAdult? : boolean    // 선택 속성(필수가 아님)

}

let user1: IUser = {

                name: 'Neo',

                age: 20

}

 

interface IName {

                (매개변수: 매개변수타입) : 리턴 타입지정

}

interface IGetUser {

                (name: string) : IUser

}

 

함수 오버로드

이름은 같지만 매개변수 타입과 반환 타입이 다른 여러 함수를 가질 수 있는 것

함수 오버로드를 통해 다양한 구조의 함수를 생성하고 관리할 수 있음

 

keyof

인덱싱 가능 타입에서 keyof를 사용하면 속성 이름을 타입으로 사용할 수 있음

인덱싱 가능 타입의 속성 이름들이 유니온 타입으로 적용됨

 

ex07_interfacef.ts

interface IUserA {
    name: string
}

interface IGetUser {
    (name: string) : IUserA
}

const getUser: IGetUser = function(n) {
    let user: IUserA = {
        name: n
    }
    return user;
}
let resultA = getUser("green")
console.log(resultA)

// 함수 선언부
function add2(a: string, b: string) : string;   // a도 string으로 받고 b도 string으로 받고 return도 string으로 받을거야
function add2(a: number, b: number) : number;

// 함수 구현부 - 선언부의 매개변수 개수와 같아야 함
function add2(a: any, b: any) : any {
    return a + b;
}
add2('hello','type')
add2(10, 20)
// add('hello', 20) // error 발생

interface nUser {
    name: string,
    age: number,
    getData(x: string) : string [];
    getData(x: number) : string
}

let user: nUser = {
    name: 'son',
    age: 36,
    getData: (data: any) => {
        if(typeof data === 'string') {
            return data.split('');
        } else {
            return data.toString();
        }
    }
}

user.getData("Hello")   // ['H', 'e', 'l', 'l', 'o']
user.getData(123)   // 123

console.log(user.getData("Hello"))
console.log(user.getData(123))

// keyof
interface ICountries {
    KR: '대한민국',
    US: '미국',
    CP: '중국'
}
let country : ICountries[keyof ICountries];
country = "대한민국"

let country2 : keyof ICountries;
country2 = "KR";