Как присвоить конкретное строковое значение в качестве типа в dart

#typescript #dart

#typescript #dart

Вопрос:

Исходя из typescript, я использовался для присвоения определенных строковых значений в качестве типов свойствам класса следующим образом:

 type MyType = 'foo' | 'bar';
class MyClass {
    myProp: MyType;

    // or even inline
    myProp2: 'foo2' | 'bar2';
}

const instance = new MyClass();

// I can do this:
instance.myProp = 'foo';

// Or this:
instance.myProp = 'bar';

// But I CANNOT do this:
instance.myProp = 'some_random_string_value';
 

Как я могу добиться того же в Dart?

Комментарии:

1. Невозможно в Dart. Вы можете использовать enum для достижения аналогичной функции, но не совсем такой же: dart.dev/guides/language/language-tour#enumerated-types

2. Я понимаю. Спасибо!

Ответ №1:

Dart не позволяет вам объявлять такое ограничение. Вместо этого вы можете либо объявить правильное перечисление:

 enum MyType { foo, bar }
class MyClass {
    MyType myProp;
}
...
  myThing.myProp = MyType.foo; 
 

или используйте строки, а затем проверьте, что значение является одним из допустимых:

 String _checkMyType(String string, [String? argumentName]) {
  if (string == "foo" || string == "bar") return string;
  throw ArgumentError.value(string, argumentName, "Must be one of 'foo' or 'bar'");
}
class MyClass {
  String _myProp;
  String get myProp => _myProp;
  set myProp(String value) {
    _myProp = checkMyType(value);
  }
}
...
  myThing.myProp = "foo"; // Works
  myThing.myProp = "nah"; // Throws