como usar a API do compilador TypeScript para obter informações de funções normais, por exemplo: tipo de retorno/parâmetros?
/**
* 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
}
}
Eu vi o Wiki do TypeScript e posso obter as informações do construtor, por exemplo: tipo de retorno/parâmetros.
[
{
"name": "User",
"documentation": "class of User",
"type": "typeof User",
"constructors": [
{
"parameters": [
{
"name": "name",
"documentation": "c-name",
"type": "string"
}
],
"returnType": "User",
"documentation": "constructor"
}
]
}
]
mas eu quero obter as informações de returnType/parâmetros/documentação da função normal getName, como posso fazer isso?
ps: Eu sei que o construtor tem as assinaturas, assinaturas tem uma função getReturntype, mas as funções normais não têm assinaturas, então eu não posso obter a informação
obrigado!
Resposta #1
Assumindo que você saiba como obter o MethodDeclaration, então o seguinte funcionará:
// 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 or
// you can use ts.isMethodDeclaration(node)
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
A propósito, você deveria conferir este visualizador de AST que eu escrevi. Pode ajudá-lo com algumas perguntas futuras que você tiver. Além disso, dependendo do seu caso de uso, ts-morph pode ajudar a tornar a navegação e a manipulação do AST um pouco mais fáceis.
