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";