我正在尝试生成一个返回对象文字类型的函数(不确定这是否是正确的术语)。我目前使用以下内容:
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?
答案 0 :(得分:0)
尝试在类型文字节点上设置发射标志EmitFlags.SingleLine
:
const typeLiteralNode = ts.createTypeLiteralNode(...);
ts.setEmitFlags(typeLiteralNode, EmitFlags.SingleLine);
emitTypeLiteral
中的emitter.ts似乎表明可以这样做。