Dart - Bagaimana cara mendefinisikan interface seperti di TypeScript?
Saya berasal dari Typescript, dan di TypeScript, saya bisa mendefinisikan sebuah antarmuka dari sebuah objek seperti ini:
export interface Locale {
login: {
title: string;
actions: {
submit: string;
forgot: string;
}
}
}
Saya mengerti bahwa Dart telah menghapus antarmuka, dan sebagai gantinya, semua kelas memiliki antarmuka implisit
Jadi saya mencoba mengimplementasikan antarmuka yang saya sebutkan di atas dengan menulis:
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?'
)
)
);
Tapi saya merasa ini terlalu banyak kode boilerplate.
Jadi pertanyaan saya adalah, apakah ada cara yang lebih baik untuk mengimplementasikan int
Jawaban #1
Untuk mengirim semua nilai Anda ke BaseLocale, Anda dapat mengimplementasikannya sebagai berikut:
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?');
Perlu dicatat bahwa pendekatan ini menjadikan BaseLocale bertanggung jawab untuk mengetahui properti dari dependensinya (dan secara lebih luas implementasinya) dan mungkin dianggap sebagai anti-pola oleh beberapa orang...
