β¬ οΈ Back to Table of Contents
π no-generated-empty-object-type¶
π Analysis Summary¶
| Metric | Count |
|---|---|
| π§ Functions | 4 |
| π¦ Imports | 4 |
π Table of Contents¶
π οΈ File Location:¶
π packages/eslint-plugin/src/rules/no-generated-empty-object-type.ts
π€ Default Export¶
| Property | Value |
|---|---|
name |
'no-generated-empty-object-type' |
meta.type |
'problem' |
meta.docs.description |
'Disallow type operations that resolve to the "empty object" type' |
meta.docs.recommended |
'strict' |
meta.docs.requiresTypeChecking |
true |
meta.messages.noGeneratedEmptyObjectType |
'This type resolves to {}, the empty object type. This was likely not intentional.' |
meta.schema |
[] |
defaultOptions |
[] |
Entry point: create β documented under Functions.
π¦ Imports¶
| Name | Source |
|---|---|
TSESTree |
@typescript-eslint/utils |
AST_NODE_TYPES |
@typescript-eslint/utils |
createRule |
../util |
getParserServices |
../util |
Functions¶
create(context: any): { TSIntersectionType: (node: TSESTree.Node) => void; TSType⦶
Parameters:
contextany
Returns: { TSIntersectionType: (node: TSESTree.Node) => void; TSTypeReference(node: any): void; }
Calls:
getParserServices (from ../util)services.program.getTypeCheckertsutils.isObjectTypetsutils.isObjectFlagSetchecker.getPropertiesOfTypechecker.getIndexInfosOfTypetype.getCallSignaturestype.getConstructSignatureschecker.isTypeAssignableTochecker.getNumberTypeisEmptyObjectTypetype.isUniontype.types.somecontainsEmptyObjectTypeservices.getTypeAtLocationcontext.reportcheckNode
Internal Comments:
// Types still awaiting type arguments, such as `Record<T, unknown>` (x3)
// inside a generic declaration, also have no members yet. (x3)
Code
create(context) {
const services = getParserServices(context);
const checker = services.program.getTypeChecker();
function isEmptyObjectType(type: ts.Type) {
return (
tsutils.isObjectType(type) &&
!tsutils.isObjectFlagSet(
type,
ts.ObjectFlags.Class | ts.ObjectFlags.Interface,
) &&
checker.getPropertiesOfType(type).length === 0 &&
checker.getIndexInfosOfType(type).length === 0 &&
type.getCallSignatures().length === 0 &&
type.getConstructSignatures().length === 0 &&
// Types still awaiting type arguments, such as `Record<T, unknown>`
// inside a generic declaration, also have no members yet.
checker.isTypeAssignableTo(checker.getNumberType(), type)
);
}
function containsEmptyObjectType(type: ts.Type) {
return (
isEmptyObjectType(type) ||
(type.isUnion() && type.types.some(isEmptyObjectType))
);
}
function checkNode(node: TSESTree.Node) {
if (containsEmptyObjectType(services.getTypeAtLocation(node))) {
context.report({
node,
messageId: 'noGeneratedEmptyObjectType',
});
}
}
return {
TSIntersectionType: checkNode,
TSTypeReference(node) {
if (
node.typeArguments &&
node.parent.type !== AST_NODE_TYPES.TSIntersectionType
) {
checkNode(node);
}
},
};
}
Internal helpers¶
Declared inside another function in this file.
isEmptyObjectType(type: ts.Type): any¶
Parameters:
typets.Type
Returns: any
Calls:
tsutils.isObjectTypetsutils.isObjectFlagSetchecker.getPropertiesOfTypechecker.getIndexInfosOfTypetype.getCallSignaturestype.getConstructSignatureschecker.isTypeAssignableTochecker.getNumberType
Internal Comments:
// Types still awaiting type arguments, such as `Record<T, unknown>` (x3)
// inside a generic declaration, also have no members yet. (x3)
Code
function isEmptyObjectType(type: ts.Type) {
return (
tsutils.isObjectType(type) &&
!tsutils.isObjectFlagSet(
type,
ts.ObjectFlags.Class | ts.ObjectFlags.Interface,
) &&
checker.getPropertiesOfType(type).length === 0 &&
checker.getIndexInfosOfType(type).length === 0 &&
type.getCallSignatures().length === 0 &&
type.getConstructSignatures().length === 0 &&
// Types still awaiting type arguments, such as `Record<T, unknown>`
// inside a generic declaration, also have no members yet.
checker.isTypeAssignableTo(checker.getNumberType(), type)
);
}
containsEmptyObjectType(type: ts.Type): any¶
Parameters:
typets.Type
Returns: any
Calls:
isEmptyObjectTypetype.isUniontype.types.some
Code
checkNode(node: TSESTree.Node): void¶
Parameters:
nodeTSESTree.Node
Returns: void
Calls:
containsEmptyObjectTypeservices.getTypeAtLocationcontext.report
Code
Generated by Syntax Scribe