Estoy tratando de declarar un tipo de retorno de un captador simple en TypeScript. Ese tipo de devolución debe ajustarse a una de dos variables estáticas, asociadas con la clase que las implementa.
Toma este código:
class Hairdryer { public static ON = 'ON' public static OFF = 'OFF' private _state: Hairdryer.ON|Hairdryer.OFF = Hairdryer.OFF get state (): Hairdryer.ON|Hairdryer.OFF { return this._state } }Al compilador de TypeScript no le gusta esto y arroja errores:
'Hairdryer' solo hace referencia a un tipo, pero aquí se utiliza como espacio de nombres.(2702)
El tipo de retorno del captador público 'estado' de la clase exportada tiene o está usando el nombre privado 'Hairdryer'.(4043)
Sé que podría tener simplemente 'ON'|'OFF' como mi tipo de devolución, pero quería poder hacer referencia a los tipos posibles desde fuera de la clase, sin crear una instancia, de ahí el uso de propiedades estáticas.
Aquí hay un enlace de juegos .
Le sugiero que use Enum en lugar de valores estáticos dentro de la clase, esto es más amigable con TS.
enum State { ON = 'ON', OFF = 'OFF' } class Hairdryer { public static state = State; private _state: State= State.OFF get state (): State { return this._state } }Debe usar un tipo de acceso de índice en la parte estática de la clase (tipo de typeof Hairdryer , no secador de Hairdryer )
type State = typeof Hairdryer['ON']| typeof Hairdryer['OFF']; class Hairdryer { public static ON = 'ON' as const public static OFF = 'OFF' as const private _state: State= Hairdryer.OFF get state (): State { return this._state } }