2016-02-02 49 views
1

我想了解一些打字稿,但主要是使用Dart。將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

它主要是關於從右向左移動類型。
我想這個令人困惑的部分是{[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

+0

感謝Gunter。我閱讀了一些TypeScript,但仍然無法從中得到一些合理的代碼。 'modelModule'是'import'從'import'包導入的別名:angular2/src/common/forms/model.dart'show Control'。我不明白爲什麼作者必須直接引用src。也許TypeScript強制執行此操作。 –

+0

我想你發佈的代碼也是來自'src /'或者它是一個「bug」。 –