Простые дополнительные типы для моделей в дартс - PullRequest
1 голос
/ 10 марта 2019

Я довольно новичок в дартс. Я осматриваюсь и не вижу никаких опций для базовых опций, например, в TypeScript.

Пожалуйста, посмотрите на закомментированную собственность. 'Имя пользователя'.

Я определяю свою модель.

type User {
    uid: string,
    // Not chosen yet. The team knows this might be null from the '?' Might never be chosen.
    username?: string
    accountType: 'email'|'facebook' // Also no union types in Dart?
}

Как я могу достичь того же, что и в Dart, который будет отмечать предупреждения / ошибки времени компиляции?

Также было бы неплохо, если бы у нас была условная распаковка, например, user.?username.

Swift, Java, TypeScript, Flow, C # имеют все это. Это очень удобно.

1 Ответ

1 голос
/ 11 марта 2019

Я бы написал:

class User {
  final String uid;
  final String username;
  final AccountType accountType;
  User(this.uid, this.userName, this.accountType) {
    ArgumentError.checkNotNull(uid, "uid");
    ArgumentError.checkNotNull(accountType, "accountType");
  }
} 
enum AccountType { email, facebook; }

Дарт еще не имеет необнуляемых типов, так что вам придется проверять ноль вручную.Вы не можете получить предупреждение во время компиляции.Мы надеемся ввести ненулевые типы в качестве значения по умолчанию «скоро», после чего вы сможете написать String? userName;.Вы уже можете использовать user?.userName?.toUpperCase() для условного вызова методов со значениями, которые могут быть null.

У Dart нет типов объединения, но здесь используется перечислимый тип, который есть у Dart.Они не могут быть такими сложными, как, скажем, перечислимые типы Java, но для простого выбора между двумя значениями их вполне достаточно.

...