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;
