javascript - ¿Typescript permite interfaces y tipos de unión de cadenas?
Estoy tratando de implementar un método que tome un argumento clave que sea o un string o una instancia de la interfaz de tipo indexable IValidationContextIndex. La implementación se ve así:
/**
* Gets all ValidationContext container values.
* @returns An array of ValidationContext instances contained in the cache.
*/
public static getValidationContextValues(key: IValidationContextIndex | string ): Array<ValidationContext> {
if (key instanceof IValidationContextIndex ) [
return Object.values(<any> key);
]
else {
const vci = ValidationContainer.cache[<string>key];
return Object.values(<any> vci);
}
}
Typescript da el siguiente error para el bloque if:
[ts] 'IValidationContextIndex' solo se refiere a un tipo, pero se está utilizando como un valor aquí.
¿Alguna idea de cómo solucionar esto?
Para la mayoría de las interfaces, creo que es posible agregar una propiedad type ( type: 'IValidationContextsIndex'; ), pero eso no funciona en este caso ya que la interfaz es una interfaz de tipo indexable ....
Respuesta #1
No hay una manera de verificar el tipo en TypeScript en tiempo de ejecución ya que casi todo se convierte en un objeto una vez transpilado, por lo que es posible que tengas que hacer algo parecido a lo que se define como guardias de tipo definidos por el usuario.
Respuesta #2
Creo que esto funcionará (Según el consejo de @indrakumara):
/**
* Gets all ValidationContext container values fpr a
* Object_property string valued key or a key that is an instance of
* IValidationContextIndex).
* @returns An array of ValidationContext instances contained in the cache that corresponds to a specific Object_property key.
*/
public static getValidationContextValues(key: any ): Array<ValidationContext> {
if (typeof key === `string` ) {
const vci = ValidationContainer.cache[<string>key];
return Object.values(<any> vci);
}
else {
return Object.values(<IValidationContextIndex> key);
}
}
