Dart - วิธีการกำหนดอินเทอร์เฟซเหมือนใน TypeScript?
ฉันมาจาก Typescript และใน TypeScript ฉันสามารถกำหนดอินเตอร์เฟซของวัตถุได้ดังนี้:
export interface Locale {
login: {
title: string;
actions: {
submit: string;
forgot: string;
}
}
}
ฉันเข้าใจว่า Dart ได้ลบอินเทอร์เฟซออกไป และแทนที่ด้วยการที่ทุกคลาสมีอินเทอร์เฟซโดยปริยาย
ดังนั้นฉันจึงพยายามนำอินเตอร์เฟซที่ฉันกล่าวถึงข้างต้นไปใช้งานโดยการเขียนว่า:
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?'
)
)
);
แต่ฉันรู้สึกว่ามันเป็นโค้ดซ้ำซ้อนมากเกินไป
ดังนั้นคำถามของฉันคือ มีวิธีที่ดีกว่าในการใช้งาน int หรือไม่
คำตอบ #1
ในการส่งค่าของคุณทั้งหมดไปยัง BaseLocale คุณสามารถดำเนินการได้ดังนี้:
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?');
โปรดทราบว่าวิธีการนี้ทำให้ BaseLocale มีความรับผิดชอบในการรู้คุณสมบัติของการขึ้นต่อกันของมัน (และโดยการขยาย การใช้งานจริง) และอาจถูกพิจารณาว่าเป็นรูปแบบที่ไม่เหมาะสมโดยบางคน...
