Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate 1 file to ko - Objects and Arrays #42

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
//// { order: 1, compiler: { strict: false } }

// JavaScript 오브젝트는
// 이름이 있는 키로 래핑된 값의 모음입니다.

const userAccount = {
name: "Kieron",
id: 0,
};

// 이런 오브젝트를 더 크고, 더 복잡한
// 데이터 모델로 만들기 위해 합칠 수 있습니다.

const pie = {
type: "Apple",
};

const purchaseOrder = {
owner: userAccount,
item: pie,
};

// 단어 몇 개를 마우스로 호버해보면 (purchaseOrder 위에 호버해보세요),
// TypeScript가 JavaScript를 이름표가 붙은 타입으로
// 어떻게 해석하는지 확인할 수 있습니다.

// 값은 "."를 통해 구매 주문에 대한 사용자 이름에
// 접근할 수 있습니다:
console.log(purchaseOrder.item.type);

// () 사이에 있는 코드의 각 부분에 마우스로 호버해보면,
// 각 부분에 관련된 더 많은 정보를 제공하는 TypeScript를 확인해볼 수 있습니다.
yahma25 marked this conversation as resolved.
Show resolved Hide resolved
// 아래에 다시 작성해보세요:

// 문자별로 다음 줄에 이것을 복사해보세요:
//
// purchaseOrder.item.type

// TypeScript는 이 파일에서 어떤 JavaScript 오브젝트가
// 사용 가능한지에 대한 피드백을 playground에 제공하며, 오타를 방지할 수 있게 해주고
yahma25 marked this conversation as resolved.
Show resolved Hide resolved
// 다른 곳에서 찾아볼 필요 없이
// 추가 정보를 확인해볼 수 있도록 합니다.
yahma25 marked this conversation as resolved.
Show resolved Hide resolved

// TypeScript는 배열에도 동일한 기능을 제공합니다.
// 여기에 구매 주문만 포함된 배열이 있습니다.

const allOrders = [purchaseOrder];

// allOrders에 호버해보면,
// 호버 정보가 []로 끝나기 때문에 배열이라는 것을 알 수 있습니다.
// 인덱스(0부터 시작하는)와 함께 대괄호를 사용함으로써
// 첫 번째 순서에 접근할 수 있습니다.

const firstOrder = allOrders[0];
console.log(firstOrder.item.type);

// 오브젝트를 얻기 위한 다른 방법은
// 오브젝트를 제거하기 위해 배열을 꺼내오는 것입니다.
// 이렇게 하면 배열에서 오브젝트를 제거하고, 반환합니다.
// 내부의 기존 데이터를 변경하므로
// 배열을 변형한다고 불립니다.

const poppedFirstOrder = allOrders.pop();

// 이제 allOrders는 비어 있습니다.
// 데이터를 변형하는 것은 여러모로 유용할 수 있습니다만,
// 코드베이스의 복잡성을 줄이는 한 가지 방법은 변형을 방지하는 것입니다.
// 대신에 TypeScript는 읽기 전용으로 배열을 선언하는 방법을 제공합니다:

// 구매 주문 형태를 기반으로 하는 타입을 생성합니다:
type PurchaseOrder = typeof purchaseOrder;

// 구매 주문의 읽기 전용 배열을 생성합니다
const readonlyOrders: readonly PurchaseOrder[] = [purchaseOrder];

// 맞아요! 확실히 코드가 좀 많습니다.
// 여기에 4가지 새로운 것이 있습니다:
//
// type PurchaseOrder - TypeScript에 새로운 타입을 선언합니다.
//
// typeof - 다음에 전달되는 상수 기반의 타입을 설정하기 위해
// 타입 추론 시스템을 사용합니다.
//
// purchaseOrder - 변수 purchaseOrder를 얻고
// 이것이 주문 배열에 있는 모든 오브젝트의 형태라고
// TypeScript에 알려줍니다.
//
// readonly - 이 오브젝트는 변형을 지원하지 않으며,
// 한 번 생성되면 배열의 내용이
// 항상 동일하게 유지됩니다.
//
// 이제 readonlyOrders에서 pop을 시도하면,
// TypeScript는 오류를 발생시킵니다.

readonlyOrders.pop();

// 거의 모든 곳에서 readonly을 사용할 수 있으며,
// 여기저기에 약간의 추가 문법이 있지만,
// 많은 추가 안전성을 제공합니다.

// readonly에 대해 더 많이 알아볼 수 있습니다:
// - https://www.typescriptlang.org/docs/handbook/interfaces.html#readonly-properties
// - https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html

// 그리고 함수 예시에서
// JavaScript와 TypeScript에 대해 계속 배울 수 있습니다:
// example:functions
//
// 또는 불변성에 대해 더 알고 싶다면:
// example:immutability