如何在TypeScript接口中要求特定的字符串

11 浏览
0 Comments

如何在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日
0
0 Comments

试试这个

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
}

优点:(是的,可能更像我的个人意见,我明白,但是无论如何)

  1. 当您在代码中看到它时,它更易读,例如

if(item.reading === 'some') {
...
}
// vs 
if(item.reading === ReadingTypes.Some) {
...
}

在第一种情况下,当您阅读代码时,您可能无法从第一眼中发现。.reading字段只能包含少数特定参数,而不是任何字符串值。

  1. 如果使用枚举,编写代码时将获得更好的编辑器支持-只需记住枚举名称并编写它,它将向您显示所有枚举变量。是的,对于第一种类型(“ some'|'variants' ...),它也可以做到这一点,但它的热情程度较低。
0
0 Comments

这在1.8版本中发布为“字符串字面量类型”

TypeScript 的新功能-字符串字面量类型

页面中的示例:

interface AnimationOptions {
  deltaX: number;
  deltaY: number;
  easing: "ease-in" | "ease-out" | "ease-in-out";
}

0