728x90
# class 인스턴스가 매개변수로 적용된 함수
class
- class Student는 생성자 함수(constructor)를 통해 3가지 변수 및 타입을 선언한다.
- 실행 부분에서 this를 통해 fullName이라는 변수를 앞서 선언한 매개변수로 표현한다.
- new Student() 인스턴스를 만들 때, 3개 변수를 넣어준다.
- greeter함수에 user라는 인스턴스를 넣었을 때, 함수에 사용되지 않은 middleIntitial 속성은 제외하고 리턴값이 출력된다.
- user는 인터페이스 Person 타입의 속성을 충족하므로 함수는 정상 동작한다.
class Student {
fullName: string;
constructor(
public firstName: string,
public middleIntitial: string,
public lastName: string
){
this.fullName = firstName + " " + middleIntitial + " " + lastName
}
}
let user = new Student(
"Jane", "M.", "User"
)
interface Person {
firstName: string
lastName: string
}
function greeter(person: Person){
return "Hello, " + person.firstName + " " + person.lastName;
}
console.log('user:', user)
console.log(greeter(user))

# optional 속성 동작
- optional 속성인 last는 명시한 string 과 undefined의 유니언으로 고려된다.
- 따라서 둘 중 어떤 타입인지 확실하게 정해진 경우(narrowing)가 아니라면 관련된 메서드는 사용 불가하다.
- 이때는 last 뒤에 물음표를 붙여서 해당 메서드 또한 optional하다는 것을 명시한다.
- 함수를 실행했을 때, optional 속성을 기재하지 않았다면 undefined로 명시된다.
function printName(obj:{first:string, last?:string}){
console.log(obj.first.toUpperCase(), obj.last?.toUpperCase())
}
printName({first: 'first'})


# 유니언 타입의 적용
- 유니언 타입에 기재된 것을 입력하면 타입스크립트의 타입추론이 알아서 잘 적용된다.
type ID = number | string;
function printId (id: ID){
console.log('what is the type of ', typeof id, id)
}
printId(2)
printId('5')

# 인터페이스 상속과 속성 변경
- extends 로 인터페이스를 상속받고
- bear 라는 변수에 Bear 타입에 맞는 값을 대입하고 콘솔을 출력하면 해당 값이 출력된다.
- 이후, 속성에 집접 값을 변경해주고 다시 출력을 하면 변경된 값이 출력됨을 확인 가능하다.
interface Animal {
name:string;
}
interface Bear extends Animal {
honey: boolean
}
const bear:Bear = {name:'sample', honey: false,}
console.log('before:', bear)
bear.name = 'changed'
bear.honey = true
console.log('after:', bear)
인터페이스가 아니라 타입으로 접근한다면 & 연산자로 다른 타입의 속성을 추가할 수 있다.
type Animal = {
name: string;
}
type Bear = Animal & {
honey: boolean
}

'Language > TypeScript' 카테고리의 다른 글
| 타입스크립트 클래스 알아보기 (0) | 2024.09.07 |
|---|---|
| typeORM으로 mysql 사용 시, JSON 타입 컬럼의 내부 데이터 활용하기 (0) | 2023.04.23 |
| [TS] 클래스 속성과 접근제어자 (0) | 2022.11.05 |
| interface optional 속성/ 매개변수 타입과 기본값/함수 오버로드와 매개변수 (0) | 2022.10.23 |