in compiler/src/steps/validate-model.ts [281:320]
function validateTypeRef (name: model.TypeName, generics: (model.ValueOf[] | undefined), openGenerics: Set<string>, kind: TypeDefKind = TypeDefKind.type): void {
const fqName = fqn(name)
if (openGenerics.has(fqName)) {
// This is an open generic parameter coming from the enclosing scope
return
}
const typeDef = kind === TypeDefKind.behavior ? behaviorByName.get(fqName) : getTypeDef(name)
if (typeDef == null) {
modelError(`No type definition for '${fqName}'`)
return
}
if (typeDef.kind === 'request') {
modelError(`'${fqName}' is a request and must only be used in endpoints`)
}
validateTypeDef(typeDef)
// Validate generic parameters
const genericsCount = generics?.length ?? 0
if (typeDef.kind !== 'enum') {
const typeGenericsCount = typeDef.generics?.length ?? 0
if (genericsCount !== typeGenericsCount) {
modelError(`Expected ${typeGenericsCount} generic parameters but got ${genericsCount}`)
}
} else {
if (genericsCount !== 0) {
modelError(`Type kind '${typeDef.kind}' doesn't accept generic parameters`)
}
}
context.push('Generics')
for (const v of generics ?? []) {
validateValueOf(v, openGenerics)
}
context.pop()
}