Dart - 如何在TypeScript中定义界面?

问题描述 投票:1回答:1

我来自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的方法

typescript dart
1个回答
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有责任了解其依赖项的属性(并通过扩展实现),并且可能被某些人视为反模式...

© www.soinside.com 2019 - 2024. All rights reserved.