1. 타입 추론과 타입 표기
1-1. 타입 추론
타입스크립트의 타입 체커는 추론을 통해 타입을 정한다.
let a = 'hello'
let b = false
let c = 1
let d = [1,2,3]
위 코드에서 각 변수의 타입은 타입 체커에 의해 추론되어 정해진다.
a - string
b - boolean
c - number
d - number[ ]
1-2. 타입 표기(Type Annotation)
개발자가 직접 타입을 명시할 수 있다.
: type 을 사용한다.
let a : string = 'hello'
let b : boolean = false
let c : number = 1
let d : number[] = [1,2,3]
가능하다면 타입 체커가 추론을 통해 타입을 지정하도록 하는게 좋다.
코드의 길이나 가독성이 좋아진다.
타입 체커가 추론할 수 없는 상황이거나 명확한 이유가 있다면
명시적으로 타입을 표기한다.
2. Optional Parameter ( ? )
선택적인 프로퍼티, 파라미터를 만들어야 한다면 '?' 를 사용할 수 있습니다.
const player : {
name: string,
age?: number
} = {
name: 'bob'
}
위 코드에서
age 프로퍼티의 type은 number, undefined 입니다.
때문에 age 프로퍼티의 값을 전달하지 않아도 에러가 발생하지 않습니다.
3. Type alias
자주 사용되는 타입을 변수의 형태로 지정할 수 있습니다.
type 변수명 = 타입 의 형태로 사용합니다.
type Player = {
name: string,
age?: number
}
const player1 : Player = {
name: 'bob'
}
4. 함수의 arguments, return type
함수 코드에서는 인자의 타입과, 반환되는 값의 타입을 명시할 수 있습니다.
함수의 return type은 파라미터 다음에 명시합니다.
ex) function xxx ( ) : type { }
type Player = {
name: string,
age?: number
}
function playerMaker(name: string) : Player{
return {
name
}
}
const bob = playerMaker('Bob')
bob.age = 27
위 코드에서
playerMaker 함수는 Player type을 return 하므로
함수의 실행으로 생성된 객체 bob에서
optional property인 age 프로퍼티를 추가할 수 있습니다.
화살표 함수의 경우 다음과 같이 명시합니다.
const playerMaker = (name: string) : Player =>{
return {
name
}
}
const bob = playerMaker('Bob')
bob.age = 27
5. readonly 속성
readonly 속성은 type 정의나 interface 정의에서 사용할 수 있습니다.
해당 값을 읽기전용으로 만들 수 있습니다.
type Player = {
readonly name: string, // --> readonly 적용
age?: number
}
const playerMaker = (name: string) : Player =>{
return {
name
}
}
const bob = playerMaker('Bob')
bob.name = 'god' // Cannot assign to 'name' because it is a read-only property.
6. Tuple
타입스크립트에서 고정된 길이와 각 요소의 타입이 지정된 배열을 Tuple이라 부릅니다.
const player: [string, number, boolean] = ['bob', 27, false]
7. any
모든 타입을 허용하는 타입을 의미합니다.
떄문에 JS 프로젝트를 TS프로젝트로 점진적 마이그레이션 할때 유용합니다.
하지만
TypeScript의 타입 체커로 부터 자유로워지는 것은 반대로 보호를 받지 못하는 것과 같습니다.
const a : any[] = [1,'2',true]
const b : any = false
console.log(a + b) // "1,2,truefalse"
위 코드처럼 의도한 바가 아닐수도 있는 코드가 에러없이 실행 될 수 있습니다.
때문에 명확한 이유로 any를 사용해야 합니다.
8. unknown
해당 값이 어떤 type인지 알수 없는 경우 unknown 타입을 사용합니다.
let a : unknown = 'hello'
a.toUpperCase() // error : object is of type unknown
unknown의 경우 타입체커는 해당 값의 타입을 알지 못하므로
타입을 체크하는 코드로 타입 확인 후 사용가능합니다.
let a : unknown = 'hello'
if(typeof a === 'string'){
console.log(a.toUpperCase())
}
// HELLO
9. void
void는 아무것도 return하지 않는 함수를 대상으로 사용합니다.
function hello(){
console.log("Hello!")
}
// function hello() : void
10. never
never는 모든 타입의 하위타입 입니다.
때문에 어떤값도 never타입에 할당할 수 없습니다.
함수가 절대 return하지 않을 때
function error(text: string): never{
throw new Error(text)
}
특정 타입 값을 할당받지 않도록 할 때 사용합니다.
type NonString<T> = T extends string ? never : T;
'Frontend > TS' 카테고리의 다른 글
TS - Class (0) | 2022.07.18 |
---|---|
TS - 제네릭(generic) (0) | 2022.07.15 |
TS - Function Overloading (0) | 2022.07.15 |
TS - Call Signatures (0) | 2022.07.14 |
TS - TypeScript란 ? (0) | 2022.07.14 |