diff --git a/src/linter/Utils.ts b/src/linter/Utils.ts index b837e082400815f9872a9282fe9148191eca02fa..682778ad3e4d9be3cbce39aef1946c10a3bdd9fd 100644 --- a/src/linter/Utils.ts +++ b/src/linter/Utils.ts @@ -994,9 +994,9 @@ export function validateFields(type: Type, objectLiteral: ObjectLiteralExpressio function isSupportedTypeNodeKind(kind: SyntaxKind): boolean { return kind !== SyntaxKind.AnyKeyword && kind !== SyntaxKind.UnknownKeyword && - kind !== SyntaxKind.SymbolKeyword && kind !== SyntaxKind.UndefinedKeyword && + kind !== SyntaxKind.SymbolKeyword && kind !== SyntaxKind.IndexedAccessType && kind !== SyntaxKind.ConditionalType && kind !== SyntaxKind.MappedType && - kind !== SyntaxKind.InferType && kind !== SyntaxKind.IndexedAccessType; + kind !== SyntaxKind.InferType; } @@ -1019,9 +1019,16 @@ export function isSupportedType(typeNode: TypeNode): boolean { return true; } + if (isTupleTypeNode(typeNode)) { + for (const elem of typeNode.elements) { + if (isTypeNode(elem) && !isSupportedType(elem)) return false; + if (isNamedTupleMember(elem) && !isSupportedType(elem.type)) return false; + } + return true; + } + return !isTypeLiteralNode(typeNode) && !isTypeQueryNode(typeNode) && - !isIntersectionTypeNode(typeNode) && !isTupleTypeNode(typeNode) && - isSupportedTypeNodeKind(typeNode.kind); + !isIntersectionTypeNode(typeNode) && isSupportedTypeNodeKind(typeNode.kind); } export function isStruct(symbol: Symbol) {