Typescript编译器API:在一行上打印PropertySignature

时间:2019-03-26 17:11:44

标签: typescript typescript-compiler-api

我正在尝试生成一个返回对象文字类型的函数(不确定这是否是正确的术语)。我目前使用以下内容:

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
}

是否可以仅使用Typescript编译器API 来实现?还是需要使用外部linter / formatter?

1 个答案:

答案 0 :(得分:0)

尝试在类型文字节点上设置发射标志EmitFlags.SingleLine

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

emitter.ts似乎表明可以这样做。