4

Typescript 1.4.0 でオブジェクトのプロパティの型を取得する方法。

オブジェクトのプロパティを検索できる C# に似たものを探しています。

var properties = typeof(T).GetProperties();
foreach( var property in properties){}

私がこれまでに持っているものは次のとおりです。

var ls = ts.createLanguageService(host, ts.createDocumentRegistry())
var nav = ls.getNavigationBarItems(host.fileName);

インターフェースの例を考えると:

interface Example {
    firstname: string;
    lastname: string;
    age: string;
}

TypeScript 言語サービスは結果を返します。

{  
   "NavigationBarItems":[  
      {  
         "text":"Example",
         "kind":"interface",
         "kindModifiers":"",
         "spans":[  
            {  
               "start":0,
               "length":83
            }
         ],
         "childItems":[  
            {  
               "text":"age",
               "kind":"property",
               "kindModifiers":"",
               "spans":[  
                  {  
                     "start":69,
                     "length":12
                  }
               ],
               "childItems":[  

               ],
               "indent":0,
               "bolded":false,
               "grayed":false
            },
            {  
               "text":"firstname",
               "kind":"property",
               "kindModifiers":"",
               "spans":[  
                  {  
                     "start":24,
                     "length":18
                  }
               ],
               "childItems":[  

               ],
               "indent":0,
               "bolded":false,
               "grayed":false
            },
            {  
               "text":"lastname",
               "kind":"property",
               "kindModifiers":"",
               "spans":[  
                  {  
                     "start":47,
                     "length":17
                  }
               ],
               "childItems":[  

               ],
               "indent":0,
               "bolded":false,
               "grayed":false
            }
         ],
         "indent":0,
         "bolded":false,
         "grayed":false
      }
   ]
}

私が不足している情報は、型 (string,number,Map<>,any) であり、それが配列またはオブジェクトの場合です。

"text":"lastname",
"kind":"property",
"type":"string",  //string,number,Map<>,any

これを達成する方法はありますか?

よろしくお願いいたします。

4

1 に答える 1

3

解決策を見つけましたが、そもそもどのように見逃したのかわかりません。Nicholas Wolversonは、それに関する優れたブログ投稿を行っています。TypeScript 言語サービスの使用は正しい選択ではありませんでした。正しい解決策は、TypeScript コンパイラ API を使用することです。

var program = ts.createProgram([dummyScriptName], host.getCompilationSettings(), host);
var typeChecker = program.getTypeChecker();
var sf = program.getSourceFile(dummyScriptName);
var decls = sf.getNamedDeclarations().map(function (nd) { return nd.symbol.name + ": " + typeChecker.typeToString(typeChecker.getTypeAtLocation(nd)); });

これにより、必要な情報が返されます

interface Person {
    firstname: string;
    lastname: string;
    age: number[];
}

結果:

Person: Person
firstname: string
lastname: string
age: number[]

詳細については、( codemirror_codeブログ投稿) を使用してください。

于 2015-02-24T19:16:04.017 に答える