【发布时间】:2020-07-18 18:56:20
【问题描述】:
我想在具有类型安全性的键值数据上使用展开运算符 (...)。在 TypeScript 中,我会使用 Interfaces 来实现这一点,但我无法在 dart 中找到一种方法。
方法一失败:使用类
class Foo {
int aNumber;
String aString;
}
Foo a = Foo();
Foo b = { ...a, 'aString': 'ipsum' }; // This literal must be either a map or a set.
失败的方法2:使用地图
Map<String, dynamic> a = { 'aNumber': 2, 'aString': 'lorem' };
Map<String, dynamic> b = { ...a, 'aString': 'ipsum' }; // No error, but also no type safety.
注意:在这些方法中,b 不应该是一个列表。
我需要的 TypeScript 示例
interface Foo {
aNumber: number;
aString: string;
}
const a: Foo = { aNumber: 2, aString: 'lorem' };
const b: Foo = { ...a, aString: 'ipsum' }; // Has all the props of 'a' and overrides 'aString' to 'ipsum'.
【问题讨论】:
-
没有类型安全是什么意思?在地图方法中,它们都具有相同的类型,不是吗?如果您尝试执行以下操作:
Map<String, String> a = { 'aNumber': "test", 'aString': 'lorem' }; Map<String, int> b = { ...a };这将在编译时失败。 -
@StefanoSaitta 感谢您的回复。地图方法:具有“动态”类型的任何条目的列表。我需要:一个包含条目“int aNumber”和“String aString”的对象。
标签: typescript flutter dart rxdart