如何用Enum限制Interface中字符串变量可选值?报错求助
问题解决
报错原因
- 枚举类型的变量/属性必须赋值为枚举成员,不能直接使用字符串字面量——TypeScript会将枚举成员与其对应字符串视为不同类型
singleType变量声明后未被使用,触发TypeScript未使用变量警告
修正后的代码
export enum BookType { LANGUAGES = "LANGUAGES", SCIENCE = "SCIENCE", FICTION = "FICTION", } // 要么删除未使用的singleType,要么通过使用它消除警告 const singleType: BookType = BookType.SCIENCE; console.log(singleType); export interface UserBooks { name: string; type: BookType; } const fullBook: UserBooks = { name: 'Some string', type: BookType.SCIENCE // 使用枚举成员赋值 };
替代方案(支持直接用字符串赋值)
如果希望直接用字符串字面量也能匹配限定类型,可以改用字符串字面量联合类型,写法更简洁:
type BookType = "LANGUAGES" | "SCIENCE" | "FICTION"; const singleType: BookType = 'SCIENCE'; // 直接赋值字符串无报错 export interface UserBooks { name: string; type: BookType; } const fullBook: UserBooks = { name: 'Some string', type: 'SCIENCE' };
内容的提问来源于stack exchange,提问作者LuisEnMarroquin
相关产品推荐
相关产品推荐

