2017-11-10 9 views
1
/** 
* class of User 
*/ 
class User { 
    /** 
    * constructor 
    * @param name c-name 
    */ 
    constructor(name: string) { 
     this.name = name 
    } 
    /** 
    * property name 
    */ 
    private name: string 
    /** 
    * setName 
    * @param name f-name 
    */ 
    public setName(name: string) { 
     this.name = name 
    } 
} 

나는 Typescript Wiki을보고 생성자 정보 (예 : returnType/parameters)를 얻을 수 있습니다.typescript 사용법 일반적인 함수 정보를 얻기위한 컴파일러 API : returnType/parameters?

[ 
    { 
     "name": "User", 
     "documentation": "class of User", 
     "type": "typeof User", 
     "constructors": [ 
      { 
       "parameters": [ 
        { 
         "name": "name", 
         "documentation": "c-name", 
         "type": "string" 
        } 
       ], 
       "returnType": "User", 
       "documentation": "constructor" 
      } 
     ] 
    } 
] 

하지만 나는이 작업을 수행 할 수있는 방법, t는 정상적인 기능 getName에 returnType이/매개 변수/문서의 정보]을 얻을까요?

PS : 나는 생성자가 서명을 가지고 알고, 서명은 getReturntype 기능을 가지고 있지만, 정상적인 기능에는 서명이 없습니다, 그래서 정보를

감사를 얻을 수 없습니다!

답변

1

당신이 MethodDeclaration을 얻는 방법을 알고 가정하면, 그 다음은 작동합니다

// I'm assuming you know how to get the type checker from the compiler too. 
const typeChecker = ...; 
// Navigate through the tree to get to the method declaration located in the class. 
// This is the node with kind === ts.SyntaxKind.MethodDeclaration. 
// You will have to assert the node to ts.MethodDeclaration. 
const methodDeclaration = ... as ts.MethodDeclaration; 

const signature = typeChecker.getSignatureFromDeclaration(methodDeclaration); 
const returnType = typeChecker.getReturnTypeOfSignature(signature); 
const parameters = methodDeclaration.parameters; // array of Parameters 
const docs = methodDeclaration.jsDoc; // array of js docs 

을 그건 그렇고, 당신은 내가 쓴이 AST viewer을 확인해야합니다. 앞으로있을 질문에 대해서는 도움이 될 것입니다 (유형 검사기에 대한 질문은 제외). 또한 유스 케이스에 따라 ts-simple-ast을 사용하면 AST를 탐색하고 조작하는 데 도움이됩니다.

+0

감사합니다. 나는이 방법을 좋아한다 : const signature = checker.getSignatureFromDeclaration (method) – sunhaikuo