ts方法列表

TypeScript Compiler API 包含大量用于操作 AST(抽象語法樹)的方法和類型,完整列舉所有 API 較為龐大,但可以按照功能分類整理核心常用的 API,幫助你在編寫 Transformer 時快速參考:

一、節(jié)點類型判斷(ts.isXyz 系列)

用于判斷節(jié)點類型,返回 true 時會自動收窄節(jié)點類型(Type Narrowing)。

1. 基礎節(jié)點

ts.isNode(node):判斷是否為任意 AST 節(jié)點(最頂層類型)

ts.isSourceFile(node):是否為源文件節(jié)點(AST 根節(jié)點,代表整個 .ts 文件)

ts.isIdentifier(node):是否為標識符(變量名、函數(shù)名等,如 foo)

ts.isLiteral(node):是否為字面量(字符串、數(shù)字、布爾等)

ts.isStringLiteral(node):字符串字面量(如 "hello")

ts.isNumericLiteral(node):數(shù)字字面量(如 123)

ts.isBooleanLiteral(node):布爾字面量(如 true)

ts.isTemplateLiteral(node):模板字符串(如 `hi ${name}`)

2. 類與接口

ts.isClassDeclaration(node):類聲明(如 class A {})

ts.isInterfaceDeclaration(node):接口聲明(如 interface B {})

ts.isMethodDeclaration(node):類的方法(如 class A { fn() {} })

ts.isPropertyDeclaration(node):類的屬性(如 class A { prop: number })

ts.isConstructorDeclaration(node):類的構(gòu)造函數(shù)(如 constructor() {})

ts.isGetAccessor(node):getter 方法(如 get prop() {})

ts.isSetAccessor(node):setter 方法(如 set prop(val) {})

ts.isPropertyAccessExpression(node.expression) 被調(diào)用的是屬性訪問(如 console.log)

3. 函數(shù)與方法

ts.isFunctionDeclaration(node):函數(shù)聲明(如 function fn() {})

ts.isFunctionExpression(node):函數(shù)表達式(如 const fn = function() {})

ts.isArrowFunction(node):箭頭函數(shù)(如 const fn = () => {})

ts.isCallExpression(node):函數(shù)調(diào)用表達式(如 fn()、console.log())

ts.isNewExpression(node):構(gòu)造函數(shù)調(diào)用(如 new Cls())

ts.isParameter(node):函數(shù)參數(shù)(如 function fn(arg: number) {} 中的 arg)

4. 變量與賦值

ts.isVariableDeclaration(node):變量聲明(如 const a = 1 中的 a = 1)

ts.isVariableDeclarationList(node):變量聲明列表(如 const a = 1, b = 2)

ts.isAssignmentExpression(node):賦值表達式(如 a = b、obj.prop = 1)

ts.isBinaryExpression(node):二元表達式(如 a + b、a === b)

ts.isUnaryExpression(node):一元表達式(如 !a、-b、++i)

5. 語句與代碼塊

ts.isBlock(node):代碼塊(如 { ... })

ts.isExpressionStatement(node):表達式語句(如 console.log(1);)

ts.isIfStatement(node):if 語句(如 if (cond) {})

ts.isForStatement(node):for 循環(huán)(如 for (let i=0; i<10; i++) {})

ts.isForOfStatement(node):for...of 循環(huán)(如 for (const item of arr) {})

ts.isWhileStatement(node):while 循環(huán)(如 while (cond) {})

ts.isReturnStatement(node):return 語句(如 return 1;)

ts.isBreakStatement(node):break 語句

ts.isContinueStatement(node):continue 語句

6. 模塊與導入導出

ts.isImportDeclaration(node):import 聲明(如 import a from 'b')

ts.isExportDeclaration(node):export 聲明(如 export const a = 1)

ts.isExportDefaultDeclaration(node):默認導出(如 export default a)

ts.isImportSpecifier(node):命名導入(如 import { a } from 'b' 中的 a)

ts.isExportSpecifier(node):命名導出(如 export { a } 中的 a)

7. JSX 相關(guān)

ts.isJsxElement(node):JSX 元素(如 <div></div>)

ts.isJsxSelfClosingElement(node):自閉合 JSX 元素(如 <img />)

ts.isJsxAttribute(node):JSX 屬性(如 <div className="a"> 中的 className="a")

ts.isJsxExpression(node):JSX 中的表達式(如 <div>{name}</div> 中的 {name})

二、節(jié)點創(chuàng)建與更新(ts.factory 系列)

ts.factory 是創(chuàng)建和更新 AST 節(jié)點的核心工具,避免直接修改節(jié)點屬性(可能破壞 AST 結(jié)構(gòu))。

1. 基礎節(jié)點創(chuàng)建

ts.factory.createIdentifier(name):創(chuàng)建標識符(如 createIdentifier('foo') → foo)

ts.factory.createStringLiteral(value):創(chuàng)建字符串字面量(如 createStringLiteral('hi') → "hi")

ts.factory.createNumericLiteral(value):創(chuàng)建數(shù)字字面量(如 createNumericLiteral(123) → 123)

ts.factory.createBlock(statements, multiLine?):創(chuàng)建代碼塊(如 createBlock([...]) → { ... })

2. 函數(shù)與方法創(chuàng)建

ts.factory.createFunctionDeclaration(modifiers, name, ...):創(chuàng)建函數(shù)聲明

ts.factory.createArrowFunction(modifiers, params, body):創(chuàng)建箭頭函數(shù)

ts.factory.createMethodDeclaration(modifiers, name, ...):創(chuàng)建類的方法(TypeScript 4.8+ 合并了裝飾器到 modifiers)

ts.factory.createCallExpression(expression, args):創(chuàng)建函數(shù)調(diào)用(如 createCallExpression(consoleLog, []) → console.log())

3. 類與接口創(chuàng)建

ts.factory.createClassDeclaration(modifiers, name, ...):創(chuàng)建類聲明

ts.factory.createInterfaceDeclaration(modifiers, name, ...):創(chuàng)建接口聲明

ts.factory.createPropertyDeclaration(modifiers, name, ...):創(chuàng)建類的屬性

4. 變量與賦值創(chuàng)建

ts.factory.createVariableDeclaration(name, initializer):創(chuàng)建變量聲明(如 createVariableDeclaration('a', 1) → a = 1)

ts.factory.createVariableDeclarationList(declarations, flags):創(chuàng)建變量聲明列表(如 createVariableDeclarationList([...], ts.NodeFlags.Const) → const a = 1, b = 2)

ts.factory.createAssignmentExpression(left, right):創(chuàng)建賦值表達式(如 createAssignmentExpression(a, b) → a = b)

5. 節(jié)點更新(updateXyz)

ts.factory.updateFunctionDeclaration(node, ...):更新函數(shù)聲明

ts.factory.updateMethodDeclaration(node, ...):更新類的方法

ts.factory.updateClassDeclaration(node, ...):更新類聲明

ts.factory.updateCallExpression(node, ...):更新函數(shù)調(diào)用

ts.factory.updateIdentifier(node, newName):更新標識符名稱

三、遍歷與轉(zhuǎn)換(ts.visit 系列)

用于遍歷 AST 節(jié)點,是 Transformer 的核心邏輯載體。

ts.visitNode(node, visitor, test?):遍歷單個節(jié)點,調(diào)用 visitor 處理

ts.visitEachChild(node, visitor, context):遞歸遍歷節(jié)點的所有子節(jié)點

ts.createVisitor(visitNode, visitEachChild):創(chuàng)建自定義訪問器(高級用法)

四、上下文與程序(context 與 program)

context(轉(zhuǎn)換上下文):

context.factory:節(jié)點創(chuàng)建工具(ts.factory 的實例)

context.getCompilerOptions():獲取編譯配置(如 target、module)

context.hoistVariableDeclaration(identifier):提升變量聲明到作用域頂部

context.hoistFunctionDeclaration(node):提升函數(shù)聲明到作用域頂部

program(程序?qū)ο螅?/p>

program.getSourceFiles():獲取項目所有源文件

program.getTypeChecker():獲取類型檢查器(用于符號和類型分析)

program.getCompilerOptions():獲取項目編譯配置

program.getSourceFile(fileName):通過文件名獲取源文件

五、類型檢查器(typeChecker)

由 program.getTypeChecker() 獲取,用于分析節(jié)點的類型和符號。

typeChecker.getSymbolAtLocation(node):獲取節(jié)點對應的符號(Symbol)

typeChecker.getTypeAtLocation(node):獲取節(jié)點的類型

typeChecker.getExportsOfModule(symbol):獲取模塊的導出項

typeChecker.getSignatureFromDeclaration(node):獲取函數(shù) / 方法的簽名

六、工具函數(shù)

ts.getTextOfNode(node):獲取節(jié)點對應的源代碼字符串

ts.getLineAndCharacterOfPosition(sourceFile, position):獲取節(jié)點在源代碼中的行號和列號

ts.isKeyword(node, keyword):判斷標識符是否為關(guān)鍵字(如 ts.isKeyword(node, 'class'))

ts.factory.createUniqueName(prefix):創(chuàng)建唯一名稱(避免變量名沖突,如 createUniqueName('temp') → temp_1)

如何查詢完整 API?

TypeScript 官方文檔:Compiler API 文檔(基礎入門)。

TypeScript 源碼:核心 API 定義在 types.ts 和 factory.ts 中,可搜索關(guān)鍵字(如 function is 找判斷方法,function create 找創(chuàng)建方法)。

AST 可視化工具:使用 ts-ast-viewer.com,輸入代碼后查看節(jié)點類型,對應 API 可推導(如節(jié)點類型為 FunctionDeclaration,則判斷方法為 ts.isFunctionDeclaration,創(chuàng)建方法為 ts.factory.createFunctionDeclaration)。

IDE 智能提示:在 VS Code 中輸入 ts. 或 ts.factory. 會觸發(fā)自動補全,顯示所有可用 API 及參數(shù)說明。

通過上述分類,可覆蓋 Transformer 開發(fā)中 90% 以上的常用 API,具體場景可結(jié)合工具和源碼進一步查詢細節(jié)。

if (ts.isCallExpression(node)) {

? // 判斷是否是 console.log(...) 調(diào)用

? const isConsoleLogCall =

? ? ts.isPropertyAccessExpression(node.expression) &&? // 被調(diào)用的是屬性訪問(如 console.log)

? ? ts.isIdentifier(node.expression.expression) &&? ? // 屬性訪問的左側(cè)是標識符(console)

? ? node.expression.expression.text === 'console' &&? // 左側(cè)標識符是 console

? ? ts.isIdentifier(node.expression.name) &&? ? ? ? ? // 屬性名是標識符(log)

? ? node.expression.name.text === 'log';? ? ? ? ? ? ? // 屬性名是 log

? if (isConsoleLogCall) {

? ? console.log('攔截到 console.log 調(diào)用,參數(shù)為:', node.arguments);

? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.說說對雙向綁定的理解 1.1、雙向綁定的原理是什么 我們都知道Vue是數(shù)據(jù)雙向綁定的框架,雙向綁定由三個重要部...
    GuessYe閱讀 642評論 0 0
  • Vue -漸進式JavaScript框架 介紹 vue 中文網(wǎng) vue github Vue.js 是一套構(gòu)建用戶...
    桂_3d6b閱讀 948評論 0 0
  • 1. 什么是TypeScript? 一、核心定義 TypeScript 是 JavaScript 的超集(Supe...
    VisuperviReborn閱讀 283評論 0 0
  • Vue是什么 是一套漸進式框架,與其他框架不同的是,Vue可以自底向上逐層應用,vue核心只關(guān)注視圖層,容易上手,...
    LikMa閱讀 2,674評論 0 16
  • 說在前面:這些文章均是本人花費大量精力研究整理,如有轉(zhuǎn)載請聯(lián)系作者并注明引用,謝謝本文的受眾人群不是webpack...
    RockSAMA閱讀 7,084評論 2 7

友情鏈接更多精彩內(nèi)容