type initialize array typescript

initialize - Cómo requerir una cadena específica en la interfaz TypeScript



typescript object type (6)

Estoy creando un archivo de definición de TypeScript para una biblioteca js de terceros. Uno de los métodos permite un objeto de opciones, y una de las propiedades del objeto de opciones acepta una cadena de la lista: "collapse" , "expand" , "end-expand" y "none" .

Tengo una interfaz para el objeto de opciones:

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

¿Puede la interfaz aplicar esto, por lo que si incluye un objeto IOptions con la propiedad brace_style , solo permitirá una cadena que esté en la lista aceptable?



Otra posibilidad es hacer algo como:

export type BraceStyleOptions = "collapse" | "expand" | "end-expand" | "none"; export interface IOptions{ indent_size?: number; indent_char?: string; brace_style?: BraceStyleOptions; }

De esta forma, puede reutilizar sus opciones en cualquier lugar, también en otras interfaces.


Prueba esto

export type ReadingTypes = ''some''|''variants''|''of''|''strings''; export interface IReadings { param:ReadingTypes }


TS ofrece una tipificación de valores de cadena específicos, que se denominan tipos literales de cadena .

Aquí hay un ejemplo de cómo usarlos:

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''};


Tal vez no sea exactamente lo que quería, pero Enum s parece una solución perfecta para usted.

enum BraceStyle {Collapse, Expand, EndExpand, None} interface IOptions { indent_size?: number; indent_char?: string; brace_style?: BraceStyle }

Sin embargo, las enumeraciones están basadas en números. Significa que durante el tiempo de ejecución un valor real para, por ejemplo, BraceStyle.Collapse será 0 en este caso. Pero puede usarlos con otros scripts, incluso no mecanografiados, ya que se compilan en objetos. Así es como se verá BraceStyle después de compilar y ejecutar:

{ 0: "Collapse", 1: "Expand", 2: "EndExpand", 3: "None", Collapse: 0, Expand: 1, EndExpand: 2, None: 3 }

Si desea cadenas en su lugar, puede usar una clase con miembros estáticos, como se describe here


function keysOf<T>(obj: T, key: keyof T) { return obj[key]; } interface SomeInterface { a: string; } const instance: SomeInterface = { a: ''some value''}; let value = keysOf<SomeInterface>(instance, ''b''); // invalid value = keysOf<SomeInterface>(instance, ''a''); // valid