build: TypeScript 3.5 upgrade (#31615)

https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#typescript-35

PR Close #31615
This commit is contained in:
Igor Minar
2019-07-17 17:49:16 -07:00
committed by Miško Hevery
parent 3a2b195a58
commit 6ece7db37a
34 changed files with 196 additions and 65 deletions

View File

@ -39,7 +39,7 @@
"peerDependencies": {
"@angular/compiler-cli": "0.0.0-PLACEHOLDER",
"@bazel/typescript": "0.*",
"typescript": ">=3.4 <3.5"
"typescript": ">=3.4 <3.6"
},
"repository": {
"type": "git",

View File

@ -300,7 +300,7 @@ export * from './index';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
@ -316,7 +316,7 @@ export { MyModule } from './mymodule';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
@ -337,7 +337,7 @@ MyModule.decorators = [
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
@ -371,7 +371,7 @@ export * from './index';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
@ -514,7 +514,7 @@ import { NgModule } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class SecondaryModule {
}
@ -526,7 +526,7 @@ const a = 1;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
@ -549,7 +549,7 @@ import { NgModule } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class MyModule {
}
@ -559,7 +559,7 @@ MyModule.decorators = [
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**

View File

@ -34,7 +34,8 @@ export class UserMetric extends Metric {
endMeasure(restart: boolean): Promise<{[key: string]: any}> {
let resolve: (result: any) => void;
let reject: (error: any) => void;
const promise = new Promise((res, rej) => {
const promise = new Promise < { [key: string]: any; }
> ((res, rej) => {
resolve = res;
reject = rej;
});

View File

@ -93,7 +93,8 @@ export interface MockPlatformLocationConfig {
*
* @publicApi
*/
export const MOCK_PLATFORM_LOCATION_CONFIG = new InjectionToken('MOCK_PLATFORM_LOCATION_CONFIG');
export const MOCK_PLATFORM_LOCATION_CONFIG =
new InjectionToken<MockPlatformLocationConfig>('MOCK_PLATFORM_LOCATION_CONFIG');
/**
* Mock implementation of URL state.

View File

@ -23,7 +23,7 @@
},
"peerDependencies": {
"@angular/compiler": "0.0.0-PLACEHOLDER",
"typescript": ">=3.4 <3.5"
"typescript": ">=3.4 <3.6"
},
"engines": {
"node": ">=8.0"

View File

@ -106,8 +106,8 @@ function createEmitCallback(options: api.CompilerOptions): api.TsEmitCallback|un
}) =>
// tslint:disable-next-line:no-require-imports only depend on tsickle if requested
require('tsickle').emitWithTsickle(
program, {...tsickleHost, options, host}, host, options, targetSourceFile, writeFile,
cancellationToken, emitOnlyDtsFiles, {
program, {...tsickleHost, options, host, moduleResolutionHost: host}, host, options,
targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, {
beforeTs: customTransformers.before,
afterTs: customTransformers.after,
});

View File

@ -59,6 +59,7 @@ export interface MetadataMap { [name: string]: MemberMetadata[]; }
export interface MemberMetadata {
__symbolic: 'constructor'|'method'|'property';
decorators?: (MetadataSymbolicExpression|MetadataError)[];
parameters?: (MetadataSymbolicExpression|MetadataError|null|undefined)[];
}
export function isMemberMetadata(value: any): value is MemberMetadata {
if (value) {

View File

@ -79,7 +79,7 @@ const MIN_TS_VERSION = '3.4.0';
* ∀ supported typescript version v, v < MAX_TS_VERSION
* MAX_TS_VERSION is not considered as a supported TypeScript version
*/
const MAX_TS_VERSION = '3.5.0';
const MAX_TS_VERSION = '3.6.0';
class AngularCompilerProgram implements Program {
private rootNames: string[];

View File

@ -771,12 +771,6 @@ describe('ng type checker', () => {
'<div>{{"hello" | aPipe}}</div>',
`Argument of type '"hello"' is not assignable to parameter of type 'number'.`, '0:5');
});
it('should report an index into a map expression', () => {
rejectOnlyWithFullTemplateTypeCheck(
'<div>{{ {a: 1}[name] }}</div>',
`Element implicitly has an 'any' type because type '{ a: number; }' has no index signature.`,
'0:5');
});
it('should report an invalid property on an exportAs directive', () => {
rejectOnlyWithFullTemplateTypeCheck(
'<div aDir #aDir="aDir">{{aDir.fname}}</div>',

View File

@ -60,7 +60,7 @@ describe('Collector', () => {
version: METADATA_VERSION,
metadata: {
DeclaredClass: {__symbolic: 'class'},
declaredFn: {__symbolic: 'function'},
declaredFn: {__symbolic: 'function'} as any,
}
});
});
@ -433,8 +433,8 @@ describe('Collector', () => {
}
}
},
complexFn: {__symbolic: 'function'},
declaredFn: {__symbolic: 'function'}
complexFn: {__symbolic: 'function'} as any,
declaredFn: {__symbolic: 'function'} as any,
}
});
});

View File

@ -3144,7 +3144,7 @@ runInEachFileSystem(os => {
const fileoverview = `
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
`;
expect(trim(jsContents).startsWith(trim(fileoverview))).toBeTruthy();
@ -3161,7 +3161,7 @@ runInEachFileSystem(os => {
const fileoverview = `
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
`;
expect(trim(jsContents).startsWith(trim(fileoverview))).toBeTruthy();
@ -3193,7 +3193,7 @@ runInEachFileSystem(os => {
* @fileoverview Some Comp overview
* @modName {some_comp}
*
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
`;
expect(trim(jsContents).startsWith(trim(fileoverview))).toBeTruthy();
@ -3222,7 +3222,7 @@ runInEachFileSystem(os => {
* @fileoverview Some Comp overview
* @modName {some_comp}
*
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
`;
expect(trim(jsContents).startsWith(trim(fileoverview))).toBeTruthy();

View File

@ -238,7 +238,7 @@ export declare class CommonModule {
`'does_not_exist' does not exist on type '{ name: string; }'`,
`Expected 2 arguments, but got 3.`,
`Argument of type '"test"' is not assignable to parameter of type 'number'`,
`Argument of type '{ name: string; }' is not assignable to parameter of type '{}[]'`,
`Argument of type '{ name: string; }' is not assignable to parameter of type 'unknown[]'`,
];
for (const error of allErrors) {

View File

@ -56,7 +56,7 @@ import {Subject, Subscription} from 'rxjs';
*
* @publicApi
*/
export class EventEmitter<T> extends Subject<T> {
export class EventEmitter<T extends any> extends Subject<T> {
// TODO: mark this as internal once all the facades are gone
// we can't mark it as internal now because EventEmitter exported via @angular/core would not
// contain this property making it incompatible with all the code that uses EventEmitter via

View File

@ -24,7 +24,7 @@ import {noop} from '../util/noop';
// Note: We don't expose things like `Injector`, `ViewContainer`, ... here,
// i.e. users have to ask for what they need. With that, we can build better analysis tools
// and could do better codegen in the future.
export class ElementRef<T = any> {
export class ElementRef<T extends any = any> {
/**
* The underlying native element or `null` if direct access to native elements is not supported
* (e.g. when the application runs in a web worker).

View File

@ -16,7 +16,7 @@ import {of } from 'rxjs';
function asyncValidator(expected: string, timeouts = {}) {
return (c: AbstractControl) => {
let resolve: (result: any) => void = undefined !;
const promise = new Promise(res => { resolve = res; });
const promise = new Promise<ValidationErrors|null>(res => { resolve = res; });
const t = (timeouts as any)[c.value] != null ? (timeouts as any)[c.value] : 0;
const res = c.value != expected ? {'async': true} : null;

View File

@ -9,7 +9,7 @@
import {EventEmitter} from '@angular/core';
import {fakeAsync, tick} from '@angular/core/testing';
import {AsyncTestCompleter, beforeEach, describe, inject, it} from '@angular/core/testing/src/testing_internal';
import {AbstractControl, AsyncValidatorFn, FormControl, FormGroup, Validators} from '@angular/forms';
import {AbstractControl, AsyncValidatorFn, FormControl, FormGroup, ValidationErrors, Validators} from '@angular/forms';
import {FormArray} from '@angular/forms/src/model';
@ -17,7 +17,7 @@ import {FormArray} from '@angular/forms/src/model';
function asyncValidator(expected: string, timeouts = {}): AsyncValidatorFn {
return (c: AbstractControl) => {
let resolve: (result: any) => void = undefined !;
const promise = new Promise(res => { resolve = res; });
const promise = new Promise<ValidationErrors|null>(res => { resolve = res; });
const t = (timeouts as any)[c.value] != null ? (timeouts as any)[c.value] : 0;
const res = c.value != expected ? {'async': true} : null;

View File

@ -21,7 +21,7 @@ import {of } from 'rxjs';
function asyncValidator(expected: string, timeouts = {}) {
return (c: AbstractControl) => {
let resolve: (result: any) => void = undefined !;
const promise = new Promise(res => { resolve = res; });
const promise = new Promise<ValidationErrors|null>(res => { resolve = res; });
const t = (timeouts as any)[c.value] != null ? (timeouts as any)[c.value] : 0;
const res = c.value != expected ? {'async': true} : null;

View File

@ -2426,7 +2426,7 @@ import {MyInput, MyInputForm} from './value_accessor_integration_spec';
function uniqLoginAsyncValidator(expectedValue: string, timeout: number = 0) {
return (c: AbstractControl) => {
let resolve: (result: any) => void;
const promise = new Promise(res => { resolve = res; });
const promise = new Promise<any>(res => { resolve = res; });
const res = (c.value == expectedValue) ? null : {'uniqLogin': true};
setTimeout(() => resolve(res), timeout);
return promise;

View File

@ -14,7 +14,7 @@ import {MessageBus, MessageBusSink, MessageBusSource} from './message_bus';
// TODO(jteplitz602): Replace this with the definition in lib.webworker.d.ts(#3492)
export interface PostMessageTarget {
postMessage: (message: any, transfer?: [ArrayBuffer]) => void;
postMessage: (message: any, transfer?: [Transferable]) => void;
}
export class PostMessageBusSink implements MessageBusSink {

View File

@ -36,7 +36,7 @@ export function errorHandler(): ErrorHandler {
// TODO(jteplitz602): remove this and compile with lib.webworker.d.ts (#3492)
const _postMessage = {
postMessage: (message: any, transferrables?: [ArrayBuffer]) => {
postMessage: (message: any, transferrables: [Transferable]) => {
(<any>postMessage)(message, transferrables);
}
};

View File

@ -171,7 +171,10 @@ function createNgZone(): NgZone {
*/
function spawnWebWorker(uri: string, instance: WebWorkerInstance): void {
const webWorker: Worker = new Worker(uri);
const sink = new PostMessageBusSink(webWorker);
// webWorker is casted to any because the lib.d.ts signature changed in TS3.5 to require the
// transfer argument in postMessage method.
// this seems wrong but since all of this code is deprecated it shouldn't matter that much.
const sink = new PostMessageBusSink(webWorker as any);
const source = new PostMessageBusSource(webWorker);
const bus = new PostMessageBus(sink, source);

View File

@ -32,5 +32,5 @@ class MockPostMessage {
}
}
postMessage(data: any, transfer?: [ArrayBuffer]): void { this._listener(<any>{data: data}); }
postMessage(data: any, transfer?: [Transferable]): void { this._listener(<any>{data: data}); }
}

View File

@ -151,7 +151,7 @@ function joinUrls(a: string, b: string): string {
}
function withOrderedKeys<T extends{[key: string]: any}>(unorderedObj: T): T {
const orderedObj = {} as T;
const orderedObj = {} as{[key: string]: any};
Object.keys(unorderedObj).sort().forEach(key => orderedObj[key] = unorderedObj[key]);
return orderedObj;
return orderedObj as T;
}

View File

@ -89,7 +89,7 @@ import {take} from 'rxjs/operators';
scope.clients.getMock('default') !.queue.subscribe(msg => { mock.sendMessage(msg); });
mock.messages.subscribe(msg => { scope.handleMessage(msg, 'default'); });
mock.notificationClicks.subscribe(msg => { scope.handleMessage(msg, 'default'); });
mock.notificationClicks.subscribe((msg: Object) => { scope.handleMessage(msg, 'default'); });
mock.setupSw();
reg = mock.mockRegistration !;

View File

@ -28,7 +28,7 @@ export class MockServiceWorkerContainer {
mockRegistration: MockServiceWorkerRegistration|null = null;
controller: MockServiceWorker|null = null;
messages = new Subject<any>();
notificationClicks = new Subject();
notificationClicks = new Subject<{}>();
addEventListener(event: 'controllerchange'|'message', handler: Function) {
if (event === 'controllerchange') {