当前位置: 首页 > 知识库问答 >
问题:

如何在 TypeScript 界面中要求特定字符串

姚兴安
2023-03-14

我正在为第三方 js 库创建一个 TypeScript 定义文件。其中一个方法允许选项对象,选项对象的一个属性接受列表中的字符串:“折叠”、“展开”、“结束扩展”“无”。

我有一个选项对象的接口

interface IOptions {
  indent_size?: number;
  indent_char?: string;
  brace_style?: // "collapse" | "expand" | "end-expand" | "none"
}

接口是否可以强制执行这一点,因此如果您将IOptions对象与brace_style属性一起包含,它将只允许可接受列表中的字符串?

共有3个答案

邴宏大
2023-03-14

TS 提供特定字符串值的类型,这些值称为字符串文本类型。

下面是如何使用它们的示例:

type style =  "collapse" | "expand" | "end-expand" | "none";

interface IOptions {
  indent_size?: number;
  indent_char?: string;
  brace_style1?:  "collapse" | "expand" | "end-expand" | "none";
  brace_style2?:  style;
}

// Ok
let obj1: IOptions = {brace_style1: 'collapse'};

// Compile time error:
// Type '"collapsessss"' is not assignable to type '"collapse" | "expand" | "end-expand" | "none" | undefined'.
let obj2: IOptions = {brace_style1: 'collapsessss'};
诸葛康胜
2023-03-14

试试这个

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
}

优点:(是的,可能更像恕我直言,我明白,但是,尽管如此)

    < li >例如,当您在代码中看到它时,可读性更强
if(item.reading === 'some') {
...
}
// vs 
if(item.reading === ReadingTypes.Some) {
...
}

在第一种情况下,当你读代码的时候,第一眼看不到。读取字段只能包含几个特定的参数,而不能包含任何字符串值。

娄振
2023-03-14

这是在1.8版本中作为“字符串文字类型”发布的

打字稿中的新增功能 - 字符串文本类型

页面示例:

interface AnimationOptions {
  deltaX: number;
  deltaY: number;
  easing: "ease-in" | "ease-out" | "ease-in-out";
}
 类似资料:
  • 问题内容: 我正在将软件从Python重写为Go。我在提取编码为的页面时遇到问题。Python版本正在运行,但Go版本中没有。 这是可行的:Python 这不起作用:转到 我的浏览器和Python给出了相同的结果,但Go版本却没有。我该如何解决? 编辑 我认为Go可以重定向。使用Python不会发生这种情况。 编辑2 我的问题写得不好。我有两个问题:1)编码2)返回错误的页面。不知道有没有关系。

  • 问题内容: 例如,我正在从文本文件中提取文本String,我需要这些词来形成数组。但是,当我执行所有这些操作时,有些单词以逗号(,)或句号(。)结尾,甚至附有括号(这完全是正常现象)。 我要做的是摆脱那些角色。我一直在尝试使用Java中的预定义String方法来做到这一点,但我还是无法解决。 问题答案: 用: replaceAll采用正则表达式。这个: …寻找每个逗号和/或句号。

  • 问题内容: 我有一个多行字符串,该字符串由一组不同的定界符定界: 我可以使用将该字符串拆分为多个部分,但似乎无法获取与定界符匹配的实际字符串。 换句话说,这就是我得到的: 这就是我要的 是否有任何JDK使用分隔符regex拆分字符串但又保留分隔符的方法? 问题答案: 你可以使用和。像这样: 你将获得: 最后一个是你想要的。 等于选择之前;或之后的空字符;。 希望这可以帮助。 编辑 Fabian S

  • 问题内容: 我想用多个定界符分割一个字符串,但将定界符保留在结果列表中。我认为这是解析任何一种公式的初始步骤都是有用的,而且我怀疑有一个不错的Python解决方案。 有人在这里用Java问了类似的问题。 例如,典型的拆分如下所示: 但是我正在寻找一种添加加号(或保留它)的好方法: 最终,我想对每个运算符和括号进行此操作,因此,如果有一种方法 一劳永逸,那就更好了。 问题答案: 您可以使用Pytho

  • 示例:[可爱]微笑这是测试[笑哭] 目的:将这个字符串中所有中括号表示的文字替换为emoji

  • 问题内容: 我有以下字符串(Java 1.5): 我需要一个数组: 用Java最方便的方法是什么? 问题答案: 这将为您提供所需的数组,只有第一项为空。和: 这将使数组没有空的第一项。 此处的关键是零宽度正向超前(非捕获构造)(请参阅regex pattern docs)。 表示“或者;或:” 是字边界的-在那里是为了不将第一个视为定界符(因为它是序列的开头)