#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-types2. Я понимаю. Спасибо!
Ответ №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