refactor(compiler): ensure compatibility with typescript strict flag (#30993)
As part of FW-1265, the `@angular/compiler` package is made compatible with the TypeScript `--strict` flag. This already unveiled a few bugs, so the strictness flag seems to help with increasing the overall code health. Read more about the strict flag [here](https://www.typescriptlang.org/docs/handbook/compiler-options.html) PR Close #30993
This commit is contained in:

committed by
Miško Hevery

parent
2200884e55
commit
012b535147
@ -15,7 +15,7 @@ import {ParseTreeResult} from '../../../ml_parser/parser';
|
||||
|
||||
import {I18N_ATTR, I18N_ATTR_PREFIX, I18nMeta, hasI18nAttrs, icuFromI18nMessage, metaFromI18nMessage, parseI18nMeta} from './util';
|
||||
|
||||
function setI18nRefs(html: html.Node & {i18n: i18n.AST}, i18n: i18n.Node) {
|
||||
function setI18nRefs(html: html.Node & {i18n?: i18n.AST}, i18n: i18n.Node) {
|
||||
html.i18n = i18n;
|
||||
}
|
||||
|
||||
@ -128,4 +128,4 @@ export function processI18nMeta(
|
||||
new I18nMetaVisitor(interpolationConfig, /* keepI18nAttrs */ false),
|
||||
htmlAstWithErrors.rootNodes),
|
||||
htmlAstWithErrors.errors);
|
||||
}
|
||||
}
|
||||
|
@ -165,7 +165,8 @@ export function assembleBoundTextPlaceholders(
|
||||
meta instanceof i18n.Message ? meta.nodes.find(node => node instanceof i18n.Container) : meta;
|
||||
if (node) {
|
||||
(node as i18n.Container)
|
||||
.children.filter((child: i18n.Node) => child instanceof i18n.Placeholder)
|
||||
.children
|
||||
.filter((child: i18n.Node): child is i18n.Placeholder => child instanceof i18n.Placeholder)
|
||||
.forEach((child: i18n.Placeholder, idx: number) => {
|
||||
const content = wrapI18nPlaceholder(startIdx + idx, contextId);
|
||||
updatePlaceholderMap(placeholders, child.name, content);
|
||||
|
@ -177,7 +177,7 @@ export class TemplateDefinitionBuilder implements t.Visitor<void>, LocalResolver
|
||||
this._valueConverter = new ValueConverter(
|
||||
constantPool, () => this.allocateDataSlot(),
|
||||
(numSlots: number) => this.allocatePureFunctionSlots(numSlots),
|
||||
(name, localName, slot, value: o.ReadVarExpr) => {
|
||||
(name, localName, slot, value: o.Expression) => {
|
||||
const pipeType = pipeTypeByName.get(name);
|
||||
if (pipeType) {
|
||||
this.pipes.add(pipeType);
|
||||
@ -1517,7 +1517,7 @@ const SHARED_CONTEXT_KEY = '$$shared_ctx$$';
|
||||
* declaration should always come before the local ref declaration.
|
||||
*/
|
||||
type BindingData = {
|
||||
retrievalLevel: number; lhs: o.ReadVarExpr; declareLocalCallback?: DeclareLocalVarCallback;
|
||||
retrievalLevel: number; lhs: o.Expression; declareLocalCallback?: DeclareLocalVarCallback;
|
||||
declare: boolean;
|
||||
priority: number;
|
||||
localRef: boolean;
|
||||
@ -1593,7 +1593,7 @@ export class BindingScope implements LocalResolver {
|
||||
* @param declareLocalCallback The callback to invoke when declaring this local var
|
||||
* @param localRef Whether or not this is a local ref
|
||||
*/
|
||||
set(retrievalLevel: number, name: string, lhs: o.ReadVarExpr,
|
||||
set(retrievalLevel: number, name: string, lhs: o.Expression,
|
||||
priority: number = DeclarationPriority.DEFAULT,
|
||||
declareLocalCallback?: DeclareLocalVarCallback, localRef?: true): BindingScope {
|
||||
if (this.map.has(name)) {
|
||||
@ -1644,12 +1644,14 @@ export class BindingScope implements LocalResolver {
|
||||
if (!this.map.has(bindingKey)) {
|
||||
this.generateSharedContextVar(retrievalLevel);
|
||||
}
|
||||
return this.map.get(bindingKey) !.lhs;
|
||||
// Shared context variables are always generated as "ReadVarExpr".
|
||||
return this.map.get(bindingKey) !.lhs as o.ReadVarExpr;
|
||||
}
|
||||
|
||||
getSharedContextName(retrievalLevel: number): o.ReadVarExpr|null {
|
||||
const sharedCtxObj = this.map.get(SHARED_CONTEXT_KEY + retrievalLevel);
|
||||
return sharedCtxObj && sharedCtxObj.declare ? sharedCtxObj.lhs : null;
|
||||
// Shared context variables are always generated as "ReadVarExpr".
|
||||
return sharedCtxObj && sharedCtxObj.declare ? sharedCtxObj.lhs as o.ReadVarExpr : null;
|
||||
}
|
||||
|
||||
maybeGenerateSharedContextVar(value: BindingData) {
|
||||
|
@ -62,14 +62,14 @@ export function temporaryAllocator(statements: o.Statement[], name: string): ()
|
||||
}
|
||||
|
||||
|
||||
export function unsupported(feature: string): never {
|
||||
export function unsupported(this: void|Function, feature: string): never {
|
||||
if (this) {
|
||||
throw new Error(`Builder ${this.constructor.name} doesn't support ${feature} yet`);
|
||||
}
|
||||
throw new Error(`Feature ${feature} is not supported yet`);
|
||||
}
|
||||
|
||||
export function invalid<T>(arg: o.Expression | o.Statement | t.Node): never {
|
||||
export function invalid<T>(this: t.Visitor, arg: o.Expression | o.Statement | t.Node): never {
|
||||
throw new Error(
|
||||
`Invalid state: Visitor ${this.constructor.name} doesn't handle ${arg.constructor.name}`);
|
||||
}
|
||||
|
Reference in New Issue
Block a user