0Pricing
TypeScript Academy · บทเรียน

ตัวปรับแต่งในชนิดแมป: readonly และ ?

เพิ่มหรือลบตัวปรับแต่งด้วย +/- ในชนิดแมป

ตัวปรับแต่งในชนิดแมป: readonly และ ? เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ประเภทแมปสามารถเพิ่มหรือนำตัวปรับแต่ง `readonly` และตัวเลือก (`?`) ออกจากคุณสมบัติได้ โดยใช้คำนำหน้า `+` และ `-`

การเพิ่มตัวปรับแต่งด้วย +

คำนำหน้า `+` ซึ่งเป็นค่าโดยนัยตามค่าเริ่มต้น จะเพิ่มตัวปรับแต่งให้กับคุณสมบัติแต่ละรายการในประเภทแมป
type Readonly<T> = { +readonly [K in keyof T]: T[K] }; // + is implicit
type Optional<T> = { [K in keyof T]+?: T[K] };

การนำ readonly ออกด้วย -

ใช้ `-readonly` เพื่อนำตัวปรับแต่ง readonly ออกจากคุณสมบัติ
type Mutable<T> = { -readonly [K in keyof T]: T[K] };
const mutableUser: Mutable<Readonly<User>> = { id: 1, name: 'Alice' };
mutableUser.id = 2; // OK now

การนำ ? ออกด้วย -

ใช้ `-?` เพื่อนำตัวปรับแต่งตัวเลือกออก ทำให้คุณสมบัติทั้งหมดเป็นสิ่งที่ต้องระบุ
type Required<T> = { [K in keyof T]-?: T[K] };
// Now all optional properties become required

การรวม - และ -?

คุณสามารถรวมการนำออกทั้งสองแบบเพื่อสร้างประเภทที่แก้ไขได้และมีคุณสมบัติที่ต้องระบุ
type Concrete<T> = { -readonly [K in keyof T]-?: T[K] };

Partial และ Required เป็นสิ่งตรงข้ามกัน

Partial เพิ่ม `?` ด้วย `+?` ส่วน Required นำออกด้วย `-?`
// From TypeScript lib:
type Partial<T> = { [K in keyof T]?: T[K] };   // adds ?
type Required<T> = { [K in keyof T]-?: T[K] };  // removes ?

การคงตัวปรับแต่งไว้ตามค่าเริ่มต้น

หากไม่ระบุ `+` หรือ `-` อย่างชัดเจน ประเภทแมปจะคงตัวปรับแต่งที่มีอยู่จากประเภทต้นฉบับไว้
interface User { readonly id: number; name?: string; }
type Copy<T> = { [K in keyof T]: T[K] };
type C = Copy<User>; // readonly id preserved, name? preserved

การใช้งานจริง: ประเภท Patch

สร้างประเภท Patch ที่ทำให้คุณสมบัติทั้งหมดเป็นตัวเลือก และนำ readonly ออกด้วยเพื่อให้สามารถอัปเดตได้
type Patch<T> = { -readonly [K in keyof T]?: T[K] };

DeepReadonly

ใช้ readonly แบบเรียกซ้ำด้วยประเภทแบบมีเงื่อนไขภายในประเภทแมป
type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K]
};

DeepPartial

ในทำนองเดียวกัน ใช้ ? แบบเรียกซ้ำเพื่อสร้างประเภทที่คุณสมบัติเป็นตัวเลือกในทุกระดับ
type DeepPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
};

ตารางการรวมตัวปรับแต่ง

+readonly = เพิ่ม readonly, -readonly = นำ readonly ออก, +? = เพิ่มตัวเลือก, -? = นำตัวเลือกออก ทั้งสี่แบบสามารถใช้ร่วมกันได้

ตรวจสอบความเข้าใจ

`{ [K in keyof T]-?: T[K] }` สร้างอะไร

สรุป

ใช้คำนำหน้า +/- ก่อน readonly และ ? ในประเภทแมปเพื่อเพิ่มหรือนำตัวปรับแต่งเหล่านั้นออกอย่างชัดเจน `-?` เป็นการนำไปใช้ของ Required ส่วน `-readonly` เป็นการนำไปใช้ของ Mutable และสามารถรวมทั้งสองแบบเพื่อควบคุมการแก้ไขได้อย่างสมบูรณ์

คำถามที่พบบ่อย

บทเรียน “ตัวปรับแต่งในชนิดแมป: readonly และ ?” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวปรับแต่งในชนิดแมป: readonly และ ?” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวปรับแต่งในชนิดแมป: readonly และ ?”

เพิ่มหรือลบตัวปรับแต่งด้วย +/- ในชนิดแมป คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวปรับแต่งในชนิดแมป: readonly และ ?” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิดแมป: การแปลงชนิดออบเจ็กต์
  2. ตัวปรับแต่งในชนิดแมป: readonly และ ?
  3. ชนิดลิเทอรัลแม่แบบ: รูปแบบข้อความ
  4. การเปลี่ยนชื่อคีย์ด้วย as ในชนิดแมป
← กลับไปที่ TypeScript Academy