Parse return types and add them to the Vue test
This commit is contained in:
parent
613aead278
commit
56d18353c6
|
@ -138,6 +138,8 @@ namespace ts {
|
|||
case SyntaxKind.ParenthesizedType:
|
||||
case SyntaxKind.TypeOperator:
|
||||
return visitNode(cbNode, (<ParenthesizedTypeNode | TypeOperatorNode>node).type);
|
||||
case SyntaxKind.ReturnOperator:
|
||||
return visitNode(cbNode, (<ReturnOperatorNode>node).type);
|
||||
case SyntaxKind.IndexedAccessType:
|
||||
return visitNode(cbNode, (<IndexedAccessTypeNode>node).objectType) ||
|
||||
visitNode(cbNode, (<IndexedAccessTypeNode>node).indexType);
|
||||
|
@ -2611,6 +2613,22 @@ namespace ts {
|
|||
return type;
|
||||
}
|
||||
|
||||
function parseReturnOperator(operator: SyntaxKind.ReturnKeyword): TypeNode {
|
||||
const node = <ReturnOperatorNode>createNode(SyntaxKind.ReturnOperator);
|
||||
parseExpected(operator);
|
||||
node.operator = operator;
|
||||
node.type = parseReturnOperatorOrHigher();
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function parseReturnOperatorOrHigher(): TypeNode {
|
||||
switch (token()) {
|
||||
case SyntaxKind.ReturnKeyword:
|
||||
return parseReturnOperator(SyntaxKind.ReturnKeyword);
|
||||
}
|
||||
return parseTypeOperatorOrHigher();
|
||||
}
|
||||
|
||||
function parseTypeOperator(operator: SyntaxKind.KeyOfKeyword) {
|
||||
const node = <TypeOperatorNode>createNode(SyntaxKind.TypeOperator);
|
||||
parseExpected(operator);
|
||||
|
@ -2644,7 +2662,7 @@ namespace ts {
|
|||
}
|
||||
|
||||
function parseIntersectionTypeOrHigher(): TypeNode {
|
||||
return parseUnionOrIntersectionType(SyntaxKind.IntersectionType, parseTypeOperatorOrHigher, SyntaxKind.AmpersandToken);
|
||||
return parseUnionOrIntersectionType(SyntaxKind.IntersectionType, parseReturnOperatorOrHigher, SyntaxKind.AmpersandToken);
|
||||
}
|
||||
|
||||
function parseUnionTypeOrHigher(): TypeNode {
|
||||
|
|
|
@ -238,6 +238,7 @@
|
|||
ParenthesizedType,
|
||||
ThisType,
|
||||
TypeOperator,
|
||||
ReturnOperator,
|
||||
IndexedAccessType,
|
||||
MappedType,
|
||||
LiteralType,
|
||||
|
@ -917,6 +918,12 @@
|
|||
type: TypeNode;
|
||||
}
|
||||
|
||||
export interface ReturnOperatorNode extends TypeNode {
|
||||
kind: SyntaxKind.ReturnOperator;
|
||||
operator: SyntaxKind.ReturnKeyword;
|
||||
type: TypeNode;
|
||||
}
|
||||
|
||||
export interface IndexedAccessTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.IndexedAccessType;
|
||||
objectType: TypeNode;
|
||||
|
|
|
@ -14,7 +14,7 @@ let x = o.m() // x: number
|
|||
let y = o.m2() // y: any
|
||||
let p = o.p // p: number
|
||||
|
||||
type Propertise<T> = { [K in keyof T]: T[K] };
|
||||
type Propertise<T> = { [K in keyof T]: return T[K] };
|
||||
type Vue<T extends { data, methods, properties }> = T['data'] & T['methods'] & Propertise<T['properties']>;
|
||||
|
||||
let options = {
|
||||
|
|
Loading…
Reference in a new issue