Checker

以前に述べたように_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())

最終更新