타입스크립트 객체는 어떨까

Jaejun Kim·2023년 1월 10일

타입스크립트

목록 보기
2/9
// ★ 추론하게 냅두기
const player = {
  name: "jaejun",
  age: 1
}
player.name
player.age


// ★★ 타입 명시적 표현해주기

// 이렇게 쓰세요
let goodExample: { name: String } = { name: "재준" }
goodExample.name

// 이렇게 쓰지 마세요
let badExample: object = { name: String } = { name: "재준" }// 'string' only refers to a type, but is being used as a value here.(2693)
// 선언 자체가 불가능

let badExample_2: object = { name: "재준" }
badExample_2.name // Property 'name' does not exist on type 'object'.
badExample_2 = { eng_name: "jaejun" }
// 변수의 재할당은 가능하지만 내부속성을 끌고오는것은 불가능합니다. 즉 개별로임 쓰지마셈

let badExample_3: object = { name: {} }
badExample_3.name
// 혹시 내부 속성이 오브젝트가 아니라서 그런가? 싶어서 해봤지만 안됩니다!


// ★★★ 넣지 않을수도 있는 속성 표기해주기(선택적 변수)
const player2: { name: string, age?: number } = {
  name: "jaejun",
}

// 선택적 변수가 undefinde 일때도 일단 사용이 가능함.
player2.age
console.log(player2.age)
if (player2.age === 10) { } // 오류를 뱉지 않는다. 애초에 이거 비교하는게 일이라 그런듯.

// 물론 대부분은 사용할 수 없음: 참과 참을 비교해야 하기 때문에 오류
if (player2.age < 10) { } // 'player2.age' is possibly 'undefined'
if (player2.age && player2.age < 10) { }
// 이러면 앞에서 걸러지기 때문에 오류를 뱉지 않음. 보호능력 ㅅㅌㅊ

let arr = [1];
arr.push(player2.age) // Type 'undefined' is not assignable to type 'number'.


// ★★★★ 별칭 만들기(Alias Type) 타입을 재사용가능!!!
type Player = {
  name: string,
  age?: number
}

let player3: Player = {
  name: "jaejun"
}

let player4: Player = {
  name: "jaemin"
}

// + 별칭은 기본 자료형도 가능함. 근데 굳이 쓸 필요가 없음
type Age = number
type Name = string

type Player_other = {
  name: Name,
  age: Age
}


배움출처: https://nomadcoders.co/typescript-for-beginners/lobby

0개의 댓글