API компилятора Typescript: печатать PropertySignature в одну строку - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь сгенерировать функцию, которая возвращает объектно-литеральный тип (не уверен, что это правильный термин). В настоящее время я использую следующее:

ts.createFunctionDeclaration(
    undefined, //decorators
    [], //modifiers
    undefined, //asterisk
    'foo',
    undefined, //name
    [], //parameters

    ts.createTypeLiteralNode( //return type
        [
            ts.createPropertySignature(
                undefined, //modifiers
                ts.createIdentifier('bar'),
                undefined, //question token
                ts.createTypeReferenceNode(
                    'string',
                    undefined //generics
                ),
                undefined //initializer
            ),
            ts.createPropertySignature(
                undefined, //modifiers
                ts.createIdentifier('baz'),
                undefined, //question token
                ts.createTypeReferenceNode(
                    'string',
                    undefined //generics
                ),
                undefined //initializer
            )
        ]
    ),

    ts.createBlock([
        //some interesting statements
    ])
);

Это генерирует этот код:

function foo(): {
    bar: string;
    baz: string;
} {
    //interesting statements
}

Это работает, но я бы хотел, чтобы литерал возвращаемого типа был в одной строке, например:

function foo(): { bar: string, baz: string } {
    //interesting statements
}

Возможно ли это с помощью только API компилятора Typescript или мне нужно использовать внешний линтер / форматтер?

1 Ответ

0 голосов
/ 26 марта 2019

Попробуйте установить флаг выброса EmitFlags.SingleLine на литеральном узле типа:

const typeLiteralNode = ts.createTypeLiteralNode(...);
ts.setEmitFlags(typeLiteralNode, EmitFlags.SingleLine);

emitTypeLiteral в emitter.ts указывает на то, что это возможносделать это.

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