Как построить код Typescript в JS с помощью функции? - PullRequest
0 голосов
/ 19 сентября 2019

Пытаясь построить код машинописи в JS, чтобы я мог отображать его на пользовательском интерфейсе, чтобы пользователь мог поиграть с кодом, есть ли способ создать этот код как машинописный текст вместо текста, чтобы он также компилировался?Любая помощь здесь будет высоко ценится не мог найти источник, связанный с этой проблемой.

data содержит интерфейсы

main.js

function buildTypescript(data) {
    var _ref = window.activeOperation;
    var modelData = getModelData(data);
    var text = '';
        text += "import {Api as IngenSDK} from '@SSDK'" + ';\n\n';
        text += modelData;
        text += 'app.Api.setConfig({\n    "env": "SIT3"\n});\n\n';
        text += _ref + '(' + JSON.stringify(SDKresult[_ref].request, null, 4) + ', function(result) {\n //Your code goes here \n debugger; \n console.log(result); \n});';
        $('#request_method_TS').text(text); 
}

    function getModelData(data){
        var activePath = window.activePath.toLowerCase();
        var _interface;

        $.each(data.children, function(id, item){
            // item.name would be string like "@SDK/core/interface/member/Details";
            var path = item.name.replace(/\"/g, "");
            if (path.toLowerCase().includes(activePath)) {
                console.log('OBJ', item);
                _interface = createInterfaces(path,item.children);     
            }
        });

        return _interface;
    }

    function createInterfaces(path, data) {
       const imports  = data.map(d => d.name).join(', ');
        return `import { ${imports} } from '${path}';\n\n`;

    }

html

<code><pre id="request_method_TS" style="margin: 5px;">

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете создать Typescript как исполняемый файл, выполнив что-то вроде -

 const executableTypescript = new Function(typescriptDataAsText);

Код машинописного текста в строке уже будет скомпилирован.

Чтобы выполнить его, вы просто вызываете вновь созданную функцию, например -

 executableTypescript();

Проверьте, запустив приведенный ниже фрагмент кода, что код Typescript для записи сообщения в переменную выполняется.
Примечание: Для вашего случая, если включены такие данные Typescript modelData и более, они должны быть частью нового модуля, поскольку в нем есть операторы импорта, и они должны находиться поверхмодуль.

var path = "/filepath"
var data = [
  {
        name: "IParam"
    },
    {
        name: "IError"
    }
]

function createInterfaces(path, data){
 const imports  = data.map(d => d.name).join(', ');
 return `import { ${imports} } from '${path}';\n\n`;
}

function buildTypescript(data) {
    // To include this data as part of your text, make sure that it's a part of a new module
    const modelData = createInterfaces(path,data);
    const text = `
        let message = "Typecript executed";\n\n
        console.log(message)`;
    return text;
}

const typescriptDataAsText = buildTypescript(data);

const executableTypescript = new Function(typescriptDataAsText);

executableTypescript()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...