Dart - ¿Cómo definir una interfaz como en TypeScript?
Vengo de TypeScript, y en TypeScript, podría definir una interfaz de un objeto así:
export interface Locale {
login: {
title: string;
actions: {
submit: string;
forgot: string;
}
}
}
Entiendo que Dart ha eliminado las interfaces y, en su lugar, todas las clases tienen interfaces implícitas
Así que intenté implementar la interfaz que mencioné arriba escribiendo:
class BaseLoginActionsLocale {
final String submit;
final String forgot;
BaseLoginActionsLocale({this.submit, this.forgot});
}
class BaseLoginLocale {
final String title;
final BaseLoginActionsLocale actions;
BaseLoginLocale({this.title, this.actions});
}
class BaseLocale {
final BaseLoginLocale login;
BaseLocale({this.login});
}
...
final BaseLocale enLocale = BaseLocale(
login: BaseLoginLocale(
title: 'Login',
actions: BaseLoginActionsLocale(
submit: 'Login',
forgot: 'Forgot Password?'
)
)
);
Pero siento que es demasiado código repetitivo.
Entonces mi pregunta es, ¿hay una mejor manera de implementar un int?
Respuesta #1
Para pasar todos tus valores al BaseLocale, podrías implementarlo de la siguiente manera:
class BaseLoginActionsLocale {
final String submit;
final String forgot;
BaseLoginActionsLocale(this.submit, this.forgot);
}
class BaseLoginLocale {
final String title;
final BaseLoginActionsLocale actions;
BaseLoginLocale(this.title, submit, forgot) : actions = new BaseLoginActionsLocale(submit, forgot);
}
class BaseLocale {
final BaseLoginLocale login;
BaseLocale(title, submit, forgot) : login = new BaseLoginLocale(title, submit, forgot);
}
final BaseLocale enLocale = BaseLocale('Login', 'Login', 'Forgot Password?');
Tenga en cuenta que este enfoque hace que sea responsabilidad de BaseLocale conocer las propiedades de sus dependencias (y por extensión la implementación) y puede ser considerado un anti-patrón por algunos...
