چگونه از API کامپایلر تایپاسکریپت استفاده کنیم تا اطلاعات تابع معمولی را به دست آوریم، مثلا: نوع بازگشتی/پارامترها؟
/**
* 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
}
}
من ویکی تایپاسکریپت را دیدم و میتوانم اطلاعات سازنده را دریافت کنم، مثلاً: نوع بازگشتی/پارامترها.
[
{
"name": "User",
"documentation": "class of User",
"type": "typeof User",
"constructors": [
{
"parameters": [
{
"name": "name",
"documentation": "c-name",
"type": "string"
}
],
"returnType": "User",
"documentation": "constructor"
}
]
}
]
اما من میخواهم اطلاعات نوع بازگشتی/پارامترها/مستندات تابع معمولی getName را بدست آورم، چگونه میتوانم این کار را انجام دهم؟
پینوشت: من میدانم سازنده دارای امضاها است، امضاها دارای یک تابع getReturntype هستند، اما توابع معمولی امضا ندارند، بنابراین نمیتوانم اطلاعات را دریافت کنم
با تشکر!
پاسخ شماره ۱
با فرض اینکه میدانید چگونه 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 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
راستی، بهتر است این نمایشگر AST که من نوشتهام را بررسی کنی. ممکن است به بعضی از سوالات آیندهی تو کمک کند. همچنین، بسته به مورد استفاده تو، ts-morph میتواند به کمی آسانتر کردن ناوبری و دستکاری AST کمک کند.
