Dart-如何在TypeScript中定义接口?

时间:2019-04-03 19:26:33

标签: typescript dart

我来自Typescript,在TypeScript中,我可以像这样定义对象的接口:

export interface Locale {
  login: {
    title: string;
    actions: {
      submit: string;
      forgot: string;
    }
  }
}

我了解Dart删除了接口,相反,所有类都具有implicit interfaces

因此,我尝试通过编写以下代码来实现上述接口:

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 个答案:

答案 0 :(得分:0)

要传递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有责任了解其依赖项的属性(并通过扩展实现),并且可能被某些人视为反模式。