-
Notifications
You must be signed in to change notification settings - Fork 642
Closed
Description
Objection: 3.0.0
Knex: 0.95.14
Typescript: 4.5.4
Minimal reproducable example:
import { Model, Page, QueryBuilder } from 'objection';
export class ExtendedQueryBuilder<
M extends Model,
R = M[]
> extends QueryBuilder<M, R> {
// These are necessary. You can just copy-paste them and change the name of the query builder class.
ArrayQueryBuilderType!: ExtendedQueryBuilder<M, M[]>;
SingleQueryBuilderType!: ExtendedQueryBuilder<M, M>;
MaybeSingleQueryBuilderType!: ExtendedQueryBuilder<M, M | undefined>;
NumberQueryBuilderType!: ExtendedQueryBuilder<M, number>;
PageQueryBuilderType!: ExtendedQueryBuilder<M, Page<M>>;
}
export class BaseModel extends Model {
QueryBuilderType!: ExtendedQueryBuilder<this>;
static QueryBuilder = ExtendedQueryBuilder;
}
export default class Person extends BaseModel {
id!: number;
static get tableName() {
return 'map';
}
}
async function getPerson() {
const k = await Person.query(); // k: any
}
Inference fails and "k" becomes "any". On 4.5.2 it also fails most of the time, just hanging instead of inferring "any". It also fails in the 4.6 dev build.
TS Server log reveals what looks like infinite recursion going on:
Info 71 [16:28:04.911] response:
{"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":7,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"Could not find export statement"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"Could not find export statement"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Add or remove braces in an arrow function","description":"Add or remove braces in an arrow function","actions":[{"name":"Add braces to arrow function","description":"Add braces to arrow function","kind":"refactor.rewrite.arrow.braces.add","notApplicableReason":"Could not find a containing arrow function"},{"name":"Remove braces from arrow function","description":"Remove braces from arrow function","kind":"refactor.rewrite.arrow.braces.remove","notApplicableReason":"Could not find a containing arrow function"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 72 [16:28:04.911] request:
{"seq":8,"type":"request","command":"geterr","arguments":{"delay":0,"files":["c:/Users/JJH/Developer/node-sandbox/BaseModel.ts","c:/Users/JJH/Developer/node-sandbox/ExtendedQueryBuilder.ts","c:/Users/JJH/Developer/node-sandbox/app.ts","c:/Users/JJH/Developer/node-sandbox/person.model.ts"]}}
Perf 73 [16:28:04.912] 8::geterr: async elapsed time (in milliseconds) 0.6479
Info 74 [16:28:04.913] event:
{"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"c:/Users/JJH/Developer/node-sandbox/BaseModel.ts","diagnostics":[]}}
Err 75 [16:28:05.852] Exception on executing command delayed processing of request 8:
Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62465:42)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63720:28)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63243:31)
at typeRelatedToSomeType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63460:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63732:32)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at checkTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62809:26)
at isTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62760:24)
at isTypeAssignableTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61966:20)
at getConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:60775:77)
at getConditionalTypeInstantiation (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61748:25)
at getConstraintOfDistributiveConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:57146:40)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64121:54)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at eachTypeRelatedToType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63527:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63729:29)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63720:28)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63243:31)
at typeRelatedToSomeType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63460:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63732:32)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at checkTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62809:26)
at isTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62760:24)
at isTypeAssignableTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61966:20)
at getConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:60775:77)
at getConditionalTypeInstantiation (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61748:25)
at getConstraintOfDistributiveConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:57146:40)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64121:54)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at eachTypeRelatedToType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63527:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63729:29)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
Info 76 [16:28:05.852] event:
{"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":8}}
lynxtaa, Zauberbutter, aymericbouzy and JaneJeon
Metadata
Metadata
Assignees
Labels
No labels