2017-07-17 11 views
2

Typescriptコードを文字列に保存し、実行時にエバークレイトすることはできますか?簡単な例:Typescriptを文字列から評価しますか?

let code: string = `({ 
    Run: (data: string): string => { 
     console.log(data); return Promise.resolve("SUCCESS"); } 
    })`; 

次に、このようにそれを実行します。

let runnalbe = eval(code); 
runnable.Run("RUN!").then((result:string)=>{console.log(result);}); 

は印刷する必要があります:

RUN!SUCCESS 
+0

号活字体ではないのでJavaScriptを使用し、 'eval'を使用すると構文エラーが発生する可能性が高くなります。 – d4nyll

+1

Typescriptはあなたのコードをより安全にするために考案されました:)コードを文字列に入れると、それは非常に危険です:) – Kokodoko

答えて

2

official TypeScript compiler APIは、ソース文字列をtranspileする方法を提供します:

import * as ts from "typescript"; 

let code: string = `({ 
    Run: (data: string): string => { 
     console.log(data); return Promise.resolve("SUCCESS"); } 
    })`; 

let result = ts.transpile(code); 
let runnalbe :any = eval(result); 
runnalbe.Run("RUN!").then((result:string)=>{console.log(result);}); 
0

は、それは文字列で私の活字体のコードを保存し、それをevaulateすることが可能ですランタイム中に

はい。 TypeScriptコンパイラのtranspile関数を使用します。

もっと

レジに進む活字体 - スクリプト:https://github.com/basarat/typescript-scriptことでコアの単純ts.transpileです:https://github.com/basarat/typescript-script/blob/163388be673a56128cc1e1b3c76588001a8c1b18/transpiler.js#L60

関連する問題