Checker

Last updated 2 months ago

以前に述べたようにcheckerは、TypeScriptを他のJavaScriptトランスパイラよりもユニークに強力にするものです。Checkerはchecker.tsにあり、この時点ではTypeScriptの23k+行(コンパイラの最大部分)です。

Programによる使用方法

checkerprogramにより初期化されます。以下はコールスタックのサンプルです(binderで見たものと同じです):

program.getTypeChecker ->
ts.createTypeChecker (in checker)->
initializeTypeChecker (in checker) ->
for each SourceFile `ts.bindSourceFile` (in binder)
// followed by
for each SourceFile `ts.mergeSymbolTable` (in checker)

Emitterとの関連付け

getDiagnosticsが呼び出されると、本当の型チェックが行われます。この機能は、例えば、Program.emitが一度要求されると、CheckerはEmitResolverを返します(ProgramはCheckerのgetEmitResolver関数を呼び出します)。これは単にcreateTypeCheckerのローカル関数の集合です。Emitterを見るときにこれについて再び言及します。

checkSourceFile(createTypeCheckerのローカル関数)の下のコールスタックは以下の通りです。

program.emit ->
emitWorker (program local) ->
createTypeChecker.getEmitResolver ->
// First call the following functions local to createTypeChecker
call getDiagnostics ->
getDiagnosticsWorker ->
checkSourceFile
// then
return resolver
(already initialized in createTypeChecker using a call to local createResolver())