TypeScript Academy · บทเรียน

การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด

จัดแพ็กเกจและแชร์ชนิดอรรถประโยชน์แบบกำหนดเองบน npm

บทเรียน 4 จาก 413 ขั้นตอน

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

ไลบรารีชนิดยูทิลิตีคืออะไร

ไลบรารีชนิดยูทิลิตีจะส่งออกเฉพาะชนิดของ TypeScript เท่านั้น ไม่มีโค้ดขณะทำงาน ตัวอย่างที่ได้รับความนิยม ได้แก่ type-fest, ts-essentials และ utility-types

// A type utility library exports types like:
export type DeepPartial<T> = T extends object
  ? { [K in keyof T]?: DeepPartial<T[K]> }
  : T;

โครงสร้างโครงการ

ทำให้เรียบง่ายด้วย src/index.ts เพียงไฟล์เดียวที่ส่งออกยูทิลิตีทั้งหมดซ้ำ และตั้งค่า tsconfig.json ให้ส่งออกเฉพาะคำประกาศ

// tsconfig.json
{
  "compilerOptions": {
    "declaration": true,
    "emitDeclarationOnly": true,
    "outDir": "dist",
    "strict": true
  }
}

package.json สำหรับแพ็กเกจที่มีเฉพาะชนิด

ตั้งค่าฟิลด์ main และ types ให้ชี้ไปยังคำประกาศ และตั้งค่า sideEffects: false เพื่อให้ตัดโค้ดที่ไม่ได้ใช้ออกได้

{
  "name": "@myorg/type-utils",
  "version": "1.0.0",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "sideEffects": false,
  "files": ["dist"]
}

การสร้างคำประกาศ

เรียกใช้ tsc เพื่อส่งออกไฟล์ .d.ts สำหรับไลบรารีที่มีเฉพาะชนิด ผลลัพธ์ JS จะว่างเปล่าหรือมีเพียงเล็กน้อย

# Build declarations
npx tsc
# dist/index.d.ts is generated

การจัดการเวอร์ชันและบันทึกการเปลี่ยนแปลง

ปฏิบัติตามการกำหนดเวอร์ชันเชิงความหมาย: การเปลี่ยนแปลงชนิดข้อมูลที่ทำให้เข้ากันไม่ได้ให้เพิ่มเวอร์ชันหลัก ยูทิลิตีใหม่ให้เพิ่มเวอร์ชันย่อย และการแก้ไขให้เพิ่มเวอร์ชันแก้ไข

# Bump version
npm version minor
# Generate changelog with conventional-changelog or changesets

การเผยแพร่ไปยัง npm

ใช้ npm publish หรือ pnpm publish หากเป็นแพ็กเกจที่มีขอบเขตภายใต้องค์กร โปรดตรวจสอบว่าคุณเข้าสู่ระบบแล้วและตั้งค่าขอบเขตเรียบร้อยแล้ว

npm login
npm publish --access public
# or for private: npm publish --access restricted

ความเข้ากันได้ของเวอร์ชัน TypeScript

ระบุเวอร์ชันขั้นต่ำของ TypeScript ที่ยูทิลิตีของคุณต้องใช้ ชนิดข้อมูลเงื่อนไขแบบเวียนเกิดต้องใช้ TS 4.1 ขึ้นไป ส่วน Awaited มีมาให้ในตัวตั้งแต่ TS 4.5 ขึ้นไป

// package.json peerDependencies
{
  "peerDependencies": {
    "typescript": ">=4.5"
  }
}

การทดสอบชนิดข้อมูลด้วย tsd

ใช้แพ็กเกจ tsd เพื่อเขียนการทดสอบระดับชนิดข้อมูล ซึ่งจะทำงานระหว่างการผสานรวมอย่างต่อเนื่อง เพื่อให้แน่ใจว่ายูทิลิตีของคุณทำงานได้อย่างถูกต้อง

import { expectType } from "tsd";
import type { DeepPartial } from "@myorg/type-utils";

expectType<DeepPartial<{ a: { b: number } }>>({ a: {} });

เอกสารประกอบด้วย TSDoc

เพิ่มความคิดเห็น JSDoc รูปแบบ /** */ ให้กับชนิดข้อมูลของคุณ เครื่องมืออย่าง TypeDoc จะสร้างเอกสารประกอบส่วนเชื่อมต่อโปรแกรมประยุกต์จากความคิดเห็นเหล่านี้

/**
 * Makes all properties of T optional at every depth.
 * @example type A = DeepPartial<{ x: { y: number } }> // { x?: { y?: number } }
 */
export type DeepPartial<T> = ...

การเผยแพร่ในโมโนรีโป

ในโมโนรีโป ให้เผยแพร่แพ็กเกจชนิดข้อมูลเป็นแพ็กเกจเวิร์กสเปซ เพื่อให้แอปอื่นใช้งานผ่าน workspace:* แทน npm

// Other package's package.json
{
  "dependencies": {
    "@myorg/type-utils": "workspace:*"
  }
}

ทบทวน: การเผยแพร่ไลบรารีชนิดข้อมูล

ไลบรารียูทิลิตีชนิดข้อมูลควรมี emitDeclarationOnly: true ส่งออกชนิดข้อมูลจาก src/index.ts จัดการเวอร์ชันด้วยการกำหนดเวอร์ชันเชิงความหมาย ทดสอบด้วย tsd จัดทำเอกสารด้วย TSDoc และเผยแพร่ไปยัง npm หรือรีจิสทรีของเวิร์กสเปซ

ตรวจสอบอย่างรวดเร็ว

ตัวเลือก tsconfig ใดสร้างเฉพาะไฟล์ .d.ts โดยไม่มีผลลัพธ์ JavaScript

สิ่งที่ได้เรียนรู้

การเผยแพร่ไลบรารียูทิลิตีชนิดข้อมูลต้องใช้ emitDeclarationOnly ช่องต่าง ๆ ใน package.json อย่างเหมาะสม การทดสอบระดับชนิดข้อมูลด้วย tsd ความคิดเห็น TSDoc และการกำหนดเวอร์ชันเชิงความหมาย คุณสามารถแบ่งปันยูทิลิตีของคุณกับชุมชนหรือใช้ร่วมกันภายในโมโนรีโปได้

เริ่มต้นได้ฟรี

เรียนรู้ TypeScript ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
101
บทเรียน
352

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

บทเรียน “การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด”

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

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

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

บทเรียน “การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด” ใช้เวลานานแค่ไหน

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

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

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

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

  1. DeepPartial และ DeepReadonly
  2. ยูทิลิตี Flatten และ UnwrapPromise
  3. TupleToUnion และ UnionToIntersection
  4. การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด
← กลับไปที่ TypeScript Academy