타입스크립트 객체와 타입
Today I Learned
매일 배운 것을 정리하며 기록합니다. TypeScript 객체와 타입에 대해 공부하고 있습니다.
타입스크립트 기본 타입
자바스크립트 타입과 달리 '소문자'
- 수 타입 : number
- 불리언 타입 : boolean
- 문자열 타입 : string
- 객체 타입 : object
타입 주석 (type annotation)
변수 선언문을 확장하여 타입을 명시
-
let 변수 이름: 타입 [=초깃값]
-
const 변수 이름: 타입 =초깃값
-
ex)
let n : number = 1
let b: boolean = true
let s : string = 'good'
let o : object = {}
재할당
지정한 타입에 해당하는 값으로만 바꿀 수 있음.
- ex)
n = 'a' // error
b = 1 // error
s = false // error
o = {name :'Jack', age:32} // good
타입 추론(type inference)
- 타입 생략시 타입스크립트 컴파일러가 대입 연산자의 오른쪽 값을 분석해 왼쪽 변수의 타입을 결정
- 자바스크립트와 호환성을 위함.
- 재할당 시 초깃값에 해당하는 타입의 값만 지정 가능
any 타입
마찬가지로 자바스크립트와 호환성을 위함.
어떤 타입의 값도 할당 가능
- ex)
let a: any = 0
a = 'hello'
a = true
a = {}
undefined 타입
- 자바스크립트에서 undefined는 falsy한 값
- 타입스크립트 undefined는 타입이면서 값
- undefined는 최하위 타입이므로 undefined를 제외한 다른 타입의 값을 할당할 수 없음.
타입 계층
anyany -> number, boolean, string
any -> objectany-> object-> interface, class...
undefined
- any 타입에서 number, boolean, string 과 object 두 개의 타입이 파생
- object 타입에서 interface, class .. 파생
- 최하위 계층에 undefined 존재
인터페이스 선언문
-
interface 키워드를 통해 객체의 타입 정의
-
객체의 타입 범위를 좁히기 위함
-
중괄호로 속성과 속성의 타입 주석을 나열하는 형태로 사용
interface 인터페이스 이름 {
속성 이름[?]: 속성 타입[,...]
} -
ex)
interface IPerson {
name: string
age: number
}
선택 속성 구문 (optional property)
- optional한 속성이 있는 인터페이스 설계
- 속성 이름 뒤 물음표 기호를 붙여 만듦
- ex)
interface IPerson2 {
name: string
age: number
etc?: boolean
}
let good1: IPerson2 = {name: 'Jack', age: 32}
let good2: IPerson2 = {name: 'Jack', age: 32, etc: true}
익명 인터페이스 (anonymous interface)
- interface 키워드 사용하지 않고 이름도 없는 인터페이스
- 주로 함수를 구현할 때 사용
- ex)
let ai: {
name: string
age: number
etc?: boolean
} = {name: 'Jack', age:32}
function printMe(me: {name: string, age: number, etc?: boolean}) {
console.log(
me.etc ?
`${me.name} ${me.age} ${me.etc}` :
`${me.name} ${me.age}`
)
}
printMe(ai) // Jack 32
Reference : 전예홍, 『Do it! 타입스크립트 프로그래밍』, 이지스퍼블리싱(2020), p58-65.
Author And Source
이 문제에 관하여(타입스크립트 객체와 타입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qmasem/TLI-타입스크립트-객체와-타입저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)