ค้นหาเว็บไซต์

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 มีความรับผิดชอบในการรู้คุณสมบัติของการขึ้นต่อกันของมัน (และโดยการขยาย การใช้งานจริง) และอาจถูกพิจารณาว่าเป็นรูปแบบที่ไม่เหมาะสมโดยบางคน...