require( 'typescript')。transformの使い方は?

付延伟
const ts = require('typescript');

let template = `
         let hello: string = 'hello,world';
`
ts.transform

上記の操作で文字列を変換するにはどうすればよいですか?

Titian Cernicova-Dragomir

このtranspile機能を使用できますこれにより、任意の文字列をコンパイルできます。

import * as typescript from 'typescript';  

let template = `
         let hello: string = 'hello,world';
         class test{}
`
let errors : typescript.Diagnostic[] = []
let result = typescript.transpile(template, {}, undefined, errors);

// The result
console.log(result);
// The erorrs
for(let err of errors) console.log(err.messageText);

編集

上記の解決策は機能しますが、構文エラーのみをチェックし、セマンティックエラーはチェックしません。モジュール解決を行い、セマンティックエラーをチェックするバージョンは次のようになります。

function transpileWithAllErrors(input: string, compilerOptions?: typescript.CompilerOptions, fileName: string = "dynamic.ts", diagnostics?: typescript.Diagnostic[]): string {
    let result: string;
    let host = typescript.createCompilerHost({});
    let sourceFile = typescript.createSourceFile(fileName, template, typescript.ScriptTarget.ES5);
    let orginalGetSourceFile = host.getSourceFile;
    host.getSourceFile = (file, languageVersion, onError, shouldCreateNewSourceFile) =>
        file == fileName ?
            sourceFile :
            orginalGetSourceFile(file, languageVersion, onError, shouldCreateNewSourceFile);

    host.getCurrentDirectory = () => "";
    host.getDefaultLibLocation = () => "node_modules/typescript/lib";
    host.getDefaultLibFileName = () => "node_modules/typescript/lib/lib.d.ts";

    let program = typescript.createProgram([fileName], {}, host);

    // Capture output, 
    host.writeFile = (wFileName, data) =>{ 
        if(wFileName.endsWith(".js")) {
            result = data;
        }
    };

    if (diagnostics != null) {
        diagnostics.push(...program.getSyntacticDiagnostics(sourceFile));
        diagnostics.push(...program.getSemanticDiagnostics(sourceFile));
        diagnostics.push(...program.getOptionsDiagnostics());
    }
    program.emit(sourceFile);
    return result;
}

使用法:

let diagnostics: typescript.Diagnostic[] = []
let result = transpileWithAllErrors(template, {}, undefined, diagnostics);
for (let err of diagnostics) console.log(err.messageText);
console.log(result);

注:このメソッドは、現在のパスに関連するモジュール解決を行うため、スクリプトは現在のパスにインストールされているすべてのモジュールにアクセスできます。また、コードの広範なテストは行いませんでしたが、機能するはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

TypeScriptが「require(...)」を使用する方法に混乱しています

分類Dev

Typescript。ReferenceError:requireが定義されていません

分類Dev

Uncaught ReferenceError:requireが定義されていませんTypeScript

分類Dev

node_modules \ require_optional \にtypescriptがないファイル

分類Dev

`var x = require(" somemod ")();`に相当するTypeScriptとは何ですか。

分類Dev

typescriptで引数を取るrequireを書く方法は?

分類Dev

Typescript-RequireJSはrequire.configでパスを指定します

分類Dev

Unable to use remote.require() with TypeScript

分類Dev

Typescript require the property if other is defined (requiredIf)

分類Dev

material-uiとTypeScript:!importantの使い方は?

分類Dev

Typescript:プロパティrequireはタイプ 'typeofaceAjax'に存在しません

分類Dev

TypeScript SuiteScriptの書き方は?

分類Dev

What can I do about a "require is not defined" error in compiled TypeScript?

分類Dev

How to port an ES6 require() statement to typescript

分類Dev

Typescript:importステートメントの一部ではなくrequireステートメント

分類Dev

require( 'mongoose')。Mongooseとrequire( 'mongoose')の違い

分類Dev

`require(" module ");`と `require(" module ")。function;`の違い

分類Dev

typescript-キャッチされていないreferenceError:requireが定義されていません

分類Dev

Rubyのrequire_relativeとrequireの違いは何ですか?

分類Dev

PHPのrequireとrequire_onceの違いは何ですか?

分類Dev

`require.context`とは

分類Dev

requireとrequire-devの違いは何ですか?

分類Dev

require、include、require_once、include_onceの違いは?

分類Dev

require()とnew require()の違いは何ですか?

分類Dev

Elixir:requireとimportの違い

分類Dev

Nodejsの新しいrequire()

分類Dev

Rails- @ importと* = requireの違いは?

分類Dev

TypeScriptは、requireが含まれている場合、モジュールを見つけることができません

分類Dev

TypeScriptで使用するためにElectronファイルを「require」から「import」に変換するにはどうすればよいですか?Angular2 +

Related 関連記事

  1. 1

    TypeScriptが「require(...)」を使用する方法に混乱しています

  2. 2

    Typescript。ReferenceError:requireが定義されていません

  3. 3

    Uncaught ReferenceError:requireが定義されていませんTypeScript

  4. 4

    node_modules \ require_optional \にtypescriptがないファイル

  5. 5

    `var x = require(" somemod ")();`に相当するTypeScriptとは何ですか。

  6. 6

    typescriptで引数を取るrequireを書く方法は?

  7. 7

    Typescript-RequireJSはrequire.configでパスを指定します

  8. 8

    Unable to use remote.require() with TypeScript

  9. 9

    Typescript require the property if other is defined (requiredIf)

  10. 10

    material-uiとTypeScript:!importantの使い方は?

  11. 11

    Typescript:プロパティrequireはタイプ 'typeofaceAjax'に存在しません

  12. 12

    TypeScript SuiteScriptの書き方は?

  13. 13

    What can I do about a "require is not defined" error in compiled TypeScript?

  14. 14

    How to port an ES6 require() statement to typescript

  15. 15

    Typescript:importステートメントの一部ではなくrequireステートメント

  16. 16

    require( 'mongoose')。Mongooseとrequire( 'mongoose')の違い

  17. 17

    `require(" module ");`と `require(" module ")。function;`の違い

  18. 18

    typescript-キャッチされていないreferenceError:requireが定義されていません

  19. 19

    Rubyのrequire_relativeとrequireの違いは何ですか?

  20. 20

    PHPのrequireとrequire_onceの違いは何ですか?

  21. 21

    `require.context`とは

  22. 22

    requireとrequire-devの違いは何ですか?

  23. 23

    require、include、require_once、include_onceの違いは?

  24. 24

    require()とnew require()の違いは何ですか?

  25. 25

    Elixir:requireとimportの違い

  26. 26

    Nodejsの新しいrequire()

  27. 27

    Rails- @ importと* = requireの違いは?

  28. 28

    TypeScriptは、requireが含まれている場合、モジュールを見つけることができません

  29. 29

    TypeScriptで使用するためにElectronファイルを「require」から「import」に変換するにはどうすればよいですか?Angular2 +

ホットタグ

アーカイブ