如何在TypeScript接口中要求特定的字符串
如何在TypeScript接口中要求特定的字符串
我正在为第三方js库创建TypeScript定义文件。其中一种方法允许使用选项对象,而选项对象的一个属性接受来自列表的字符串:\"collapse\"
,\"expand\"
,\"end-expand\"
和\"none\"
。
我有一个用于选项对象的接口:
interface IOptions { indent_size?: number; indent_char?: string; brace_style?: // "collapse" | "expand" | "end-expand" | "none" }
接口能否强制执行此操作,以便如果您包含带有brace_style
属性的 IOptions
对象,则它将仅允许在可接受列表中的字符串?
admin 更改状态以发布 2023年5月22日
试试这个
export type ReadingTypes = 'some'|'variants'|'of'|'strings'; export interface IReadings { param:ReadingTypes }
编辑:非常感谢点赞,但是随着时间的推移和我作为一个开发人员的进化:),现在在大多数情况下我不再推荐这种方法。是的,它仍然有效,但是问题是上面的结构非常类似于枚举结构,为什么不使用枚举呢(下面是优点):
export enum ReadingTypes { Some = 'some', Variants = 'variants', Of = 'of', Strings = 'strings', } export interface IReadings { param: ReadingTypes }
优点:(是的,可能更像我的个人意见,我明白,但是无论如何)
- 当您在代码中看到它时,它更易读,例如
if(item.reading === 'some') { ... } // vs if(item.reading === ReadingTypes.Some) { ... }
在第一种情况下,当您阅读代码时,您可能无法从第一眼中发现。.reading字段只能包含少数特定参数,而不是任何字符串值。
- 如果使用枚举,编写代码时将获得更好的编辑器支持-只需记住枚举名称并编写它,它将向您显示所有枚举变量。是的,对于第一种类型(“ some'|'variants' ...),它也可以做到这一点,但它的热情程度较低。
这在1.8版本中发布为“字符串字面量类型”
页面中的示例:
interface AnimationOptions { deltaX: number; deltaY: number; easing: "ease-in" | "ease-out" | "ease-in-out"; }