以前に述べたように_checker_は、TypeScriptを他のJavaScriptトランスパイラよりもユニークに強力にするものです。Checkerはchecker.ts
にあり、この時点ではTypeScriptの23k+行(コンパイラの最大部分)です。
checker
はprogram
により初期化されます。以下はコールスタックのサンプルです(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)
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())