Как требовать определенную строку в интерфейсе TypeScript
Я создаю файл машинописного текста определения на 3-й партии библиотеки на JS. Один из методов допускает объект options, а одно из свойств объекта options принимает строку из списка:"collapse"
,"expand"
,"end-expand"
и "none"
.
у меня есть интерфейс для объекта options:
interface IOptions {
indent_size?: number;
indent_char?: string;
brace_style?: // "collapse" | "expand" | "end-expand" | "none"
}
может ли интерфейс применить это, так что если вы включаете IOptions
объект brace_style
свойство, это позволит только строку, которая находится в приемлемом список?
4 ответа:
Это было выпущено в версии 1.8 как "типы строковых литералов"
что нового в Typescript-String Literal Types
пример со страницы:
interface AnimationOptions { deltaX: number; deltaY: number; easing: "ease-in" | "ease-out" | "ease-in-out"; }
попробуй такое
export type ReadingTypes = 'some'|'variants'|'of'|'strings'; export interface IReadings { param:ReadingTypes }
может быть, не совсем то, что вы хотели, но
Enum
s кажется идеальным решением для вас.enum BraceStyle {Collapse, Expand, EndExpand, None} interface IOptions { indent_size?: number; indent_char?: string; brace_style?: BraceStyle }
перечисления, однако, основаны на числе. Это означает, что во время выполнения реальное значение, например
BraceStyle.Collapse
будет 0 в этом случае. Но вы можете использовать их с другими, даже не типизированными сценариями, поскольку они компилируются в объекты. Вот какBraceStyle
будет выглядеть после компиляции и запуска:{ 0: "Collapse", 1: "Expand", 2: "EndExpand", 3: "None", Collapse: 0, Expand: 1, EndExpand: 2, None: 3 }
если вы хотите вместо строк, вы можете использовать класс со статическими членами, как описано здесь