gpt4 book ai didi

typescript - Dart 中的字符串文字类型(如 TypeScript 中的)?

转载 作者:行者123 更新时间:2023-12-03 03:41:13 25 4
gpt4 key购买 nike

多亏了 Flutter,我开始使用 Dart,我非常喜欢这种语言。

我之前使用的是 TypeScript,它提供了一些我以前从未见过的非常酷的功能,我特别喜欢的一个是 string literal types看起来像这样

type Easing = "ease-in" | "ease-out" | "ease-in-out";
function doSomething(easing: Easing) { /* do something */}
doSomething("ease-in"); // OK
doSomething("easy"); // ERROR

在 Dart 中,我发现使用 enum s 有时不方便,尤其是在与特定于平台的插件实现交互时。每次我需要为 Android 的 static String 添加 Dart 接口(interface)时,我都会想念字符串文字类型。 s 或 enum s。

一个 example其中来自 android_intent 插件(但发生得更频繁):
void _createAlarm() {
final AndroidIntent intent = const AndroidIntent(
action: 'android.intent.action.SET_ALARM',
arguments: <String, dynamic>{
'android.intent.extra.alarm.DAYS': <int>[2, 3, 4, 5, 6],
'android.intent.extra.alarm.HOUR': 21,
'android.intent.extra.alarm.MINUTES': 30,
'android.intent.extra.alarm.SKIP_UI': true,
'android.intent.extra.alarm.MESSAGE': 'Create a Flutter app',
},
);
intent.launch();
}

Dart 中有没有办法像 TypeScript 的字符串文字类型一样拥有这些“魔术字符串”?

最佳答案

每个enum常量创建一个 Enum 具有 toString() 的实例方法将返回名称为 enum 的字符串类型和常量的名称。例如,给定:

enum MyEnum {
myConstant,
}

然后 MyEnum.myConstant.toString()将返回 "MyEnum.myConstant" .虽然这不会让您轻松创建任意字符串,但您可以执行以下操作:
enum alarm {
DAYS,
HOUR,
MINUTES,
SKIP_UI,
MESSAGE,
}

void _createAlarm() {
final arguments = <alarm, dynamic>{
alarm.DAYS: <int>[2, 3, 4, 5, 6],
alarm.HOUR: 21,
alarm.MINUTES: 30,
alarm.SKIP_UI: true,
alarm.MESSAGE: 'Create a Flutter app',
};

final AndroidIntent intent = const AndroidIntent(
action: 'android.intent.action.SET_ALARM',
arguments: arguments.map((k, v) => MapEntry('android.intent.extra.$k', v)),
);
intent.launch();
}

关于typescript - Dart 中的字符串文字类型(如 TypeScript 中的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com