将TypeScript转换为Dart

3

我正在尝试理解Typescript,但主要使用Dart。

我看到以下示例代码与我所做的相关

import {Component} from 'angular2/core';
import {Validators, MaxLengthValidator, Control, ControlGroup} from 'angular2/common';
import {isPresent} from 'angular2/src/facade/lang';
import {bootstrap} from 'angular2/platform/browser';

export class CustomValidators {

  static minLengthWithDescription(minLength: number, desc: string): Function {
    return (control: modelModule.Control): {[key: string]: any} => {
      if (isPresent(Validators.required(control))) return null;
      var v: string = control.value;
      return v.length < minLength ?
                 {"minlength": {"requiredLength": minLength, "actualLength": v.length, "desc": desc}} :
                 null;
    };
  }
}

我能够理解大部分的代码,但是下面这段代码具体是做什么的呢?

return (control: modelModule.Control): {[key: string]: any} =>

有谁能够将这个小类转换成Dart语言的人可以吗?

谢谢

1个回答

2

主要是将类型从右向左移动。


我想,令人困惑的部分是 {[key: string]: any},我认为这只是返回函数的返回类型。我猜它可以翻译成 Map<String,dynamic>,但在Dart中目前无法为闭包添加返回类型注释。解决方法是创建一个 typedef

typedef Map<String,dynamic> SomeFunc(modelModule.Control control);

class CustomValidators {

  static SomeFunc minLengthWithDescription(int minLength, String desc) {
    return (modelModule.Control control) {
      if (isPresent(Validators.required(control))) return null;
      String v = control.value;
      return v.length < minLength ?
                 {"minlength": {"requiredLength": minLength, "actualLength": v.length, "desc": desc}} :
                 null;
    };
  }
}

根据您提供的代码,我无法确定modelModule.是什么,但我猜想它是一个命名空间或嵌套范围,用于引用类Control


谢谢Gunter。我读了一些TypeScript,但仍然无法从中得到一些合理的代码。modelModule是从import 'package:angular2/src/common/forms/model.dart' show Control导入的model的别名。我不明白为什么作者必须直接引用src。也许TypeScript强制执行这个规定。 - st_clair_clarke
我猜你发布的代码要么也来自src/,要么就是一个“bug”。 - Günter Zöchbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接