Typescript 编译器 API:在一行上打印 PropertySignature
Typescript compiler API: print PropertySignature on a single line
我正在尝试生成一个 return 对象文字类型的函数(不确定该术语是否正确)。我目前使用的是:
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
}
它有效,但我希望 return 类型文字像这样在一行中:
function foo(): { bar: string, baz: string } {
//interesting statements
}
是否可以仅使用 Typescript 编译器 API,或者我是否需要使用外部 linter/formatter?
尝试在类型文字节点上设置发射标志 EmitFlags.SingleLine
:
const typeLiteralNode = ts.createTypeLiteralNode(...);
ts.setEmitFlags(typeLiteralNode, EmitFlags.SingleLine);
emitTypeLiteral
in emitter.ts 似乎表明可以这样做。
我正在尝试生成一个 return 对象文字类型的函数(不确定该术语是否正确)。我目前使用的是:
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
}
它有效,但我希望 return 类型文字像这样在一行中:
function foo(): { bar: string, baz: string } {
//interesting statements
}
是否可以仅使用 Typescript 编译器 API,或者我是否需要使用外部 linter/formatter?
尝试在类型文字节点上设置发射标志 EmitFlags.SingleLine
:
const typeLiteralNode = ts.createTypeLiteralNode(...);
ts.setEmitFlags(typeLiteralNode, EmitFlags.SingleLine);
emitTypeLiteral
in emitter.ts 似乎表明可以这样做。