ค้นหาเว็บไซต์

typescript - ประเภท 'string' ไม่สามารถกำหนดค่าให้กับประเภท 'number' ตามที่ต้องการสำหรับค่าของสมาชิก enum ที่คำนวณได้


ฉันได้รับข้อผิดพลาดว่า Type 'string' is not assignable to type 'number' as required for computed enum member values. เมื่อฉันใช้สตริงตามเงื่อนไขกับตัวดำเนินการ enum ของ typescript.

นี่คือโค้ด:

export enum Constants {
  PRODUCTS_URL = "/api/products",
  BASE_URL = process.env.NODE_ENV === "development" ? "http://localhost:8080" : "",
}

ตามคำตอบจาก Muroleum พบปัญหานี้:

คำตอบ #1

ปัญหานี้หรือปัญหาที่คล้ายกันกับ enums ดูเหมือนจะแก้ไขแล้ว แต่ข้อผิดพลาดยังคงมีอยู่

จะเป็นอย่างไรถ้าใช้วัตถุแทนการใช้ enum? ด้วยการเปลี่ยนแปลงเหล่านี้ มันจะทำงานคล้ายกันพร้อมกับมีประโยชน์เพิ่มเติมบางประการ:

  • ประเภท Record<string, string> อนุญาตให้กำหนดวัตถุที่มีคีย์เป็นสตริงและค่าก็เป็นสตริง
  • ตัวแก้ไข Readonly อนุญาตให้เพียงการอ่านเท่านั้น ไม่สามารถเขียนได้
  • การใช้ satisfies Record<string, string> แทน Constants: Record<string, string> ทำให้ TypeScript ไม่เพียงแต่จำกัดประเภทของคุณให้เป็น Record<string, string> แต่ยังช่วยให้สามารถจำกัดเพิ่มเติมโดยใช้คีย์และค่าที่คุณกำหนด ซึ่งทำให้คุณสามารถอ้างอิงคุณสมบัติแต่ละตัวพร้อมกับการแนะนำอัตโนมัติและได้รับข้อผิดพลาดเมื่อพยายามเข้าถึงคุณสมบัติที่ไม่มีอยู่
export const Constants = {
    PRODUCTS_URL: "/api/products",
    BASE_URL: process.env.NODE_ENV === "development" ? "http://localhost:8080" : "",
} satisfies Readonly<Record<string, string>>;

// ok
let v1 = Constants.BASE_URL;

// error, property foo is not defined
let v2 = Constants.foo;

บทความที่เกี่ยวข้อง