Moh*_*han 3 dart typescript flutter
在 TypeScript 中,我可以简单地定义一个匿名对象,如下所示,并且仍然可以获得它的智能感知。
let person = {
age: 10,
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法在 dart lang 中做同样的事情。
但我可以使用类和静态属性做类似的事情。
class Person {
static age = 10;
}
Run Code Online (Sandbox Code Playgroud)
这样就完成了工作,但我想知道是否有更简单的方法。
Dart 3 引入了Records,它允许你做你想做的事:
final person = (
name: 'Foo',
username: '@bar',
age: 45,
greet: () => 'Hello, Foo',
greetIAm: (String iam) => 'Hello, Foo! I am $iam',
);
void main() {
// Foo
print(person.name);
// @bar
print(person.username);
// 45
print(person.age);
// Hello Foo!
print(person.greet());
// Hello Foo! I am Bar!
print(person.greetIAm('Bar!'));
}
Run Code Online (Sandbox Code Playgroud)
您还可以定义类型来声明所需的字段,而无需声明新类:
typedef Person = ({
String name,
int age,
});
// With positional values instead:
typedef PersonButWithUnnamedParams = (
String name,
int age,
);
Person createPerson(String name, int age) {
return (
name: name,
age: age,
);
}
// Create a var direct from the type definitio.
final Person stranger = (
age: -1,
name: 'Stranger',
);
// Create a var of type Person through a function.
final Person stranger2 = createPerson('Stranger', -1);
// Positional params are also supported.
final PersonButWithUnnamedParams stranger3 = (
'Stranger',
-1,
);
Run Code Online (Sandbox Code Playgroud)
限制:
你不能。
Dart 不支持匿名类型。
您可以定义一个Map:
final person = <String, int>{'age': 10};
Run Code Online (Sandbox Code Playgroud)
但从智能感知的角度来看,它只是Map包含 type 的键String和 type 的值int,无法推断出存在agevalue 的键10
因此,如果你想要智能感知,你应该将其定义为一个类:
class Person {
const Person(this.age);
final int age;
}
const person = Person(10);
print(person.age); // 10
Run Code Online (Sandbox Code Playgroud)