diff --git a/integration/typings_test_ts35/include-all.ts b/integration/typings_test_ts35/include-all.ts new file mode 100644 index 0000000000..116ba30903 --- /dev/null +++ b/integration/typings_test_ts35/include-all.ts @@ -0,0 +1,77 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + +import * as animations from '@angular/animations'; +import * as animationsBrowser from '@angular/animations/browser'; +import * as animationsBrowserTesting from '@angular/animations/browser/testing'; +import * as common from '@angular/common'; +import * as commonHttp from '@angular/common/http'; +import * as commonTesting from '@angular/common/testing'; +import * as commonHttpTesting from '@angular/common/testing'; +import * as compiler from '@angular/compiler'; +import * as compilerTesting from '@angular/compiler/testing'; +import * as core from '@angular/core'; +import * as coreTesting from '@angular/core/testing'; +import * as elements from '@angular/elements'; +import * as forms from '@angular/forms'; +// Current plan for Angular 8 is to stop building the @angular/http package +// import * as http from '@angular/http'; +// import * as httpTesting from '@angular/http/testing'; +import * as platformBrowser from '@angular/platform-browser'; +import * as platformBrowserDynamic from '@angular/platform-browser-dynamic'; +import * as platformBrowserDynamicTesting from '@angular/platform-browser-dynamic/testing'; +import * as platformBrowserAnimations from '@angular/platform-browser/animations'; +import * as platformBrowserTesting from '@angular/platform-browser/testing'; +import * as platformServer from '@angular/platform-server'; +import * as platformServerTesting from '@angular/platform-server/testing'; +import * as platformWebworker from '@angular/platform-webworker'; +import * as platformWebworkerDynamic from '@angular/platform-webworker-dynamic'; +import * as router from '@angular/router'; +import * as routerTesting from '@angular/router/testing'; +import * as routerUpgrade from '@angular/router/upgrade'; +import * as serviceWorker from '@angular/service-worker'; +import * as upgrade from '@angular/upgrade'; +import * as upgradeStatic from '@angular/upgrade/static'; +import * as upgradeTesting from '@angular/upgrade/static/testing'; + +export default { + animations, + animationsBrowser, + animationsBrowserTesting, + common, + commonTesting, + commonHttp, + commonHttpTesting, + compiler, + compilerTesting, + core, + coreTesting, + elements, + forms, + // See above + // http, + // httpTesting, + platformBrowser, + platformBrowserTesting, + platformBrowserDynamic, + platformBrowserDynamicTesting, + platformBrowserAnimations, + platformServer, + platformServerTesting, + platformWebworker, + platformWebworkerDynamic, + router, + routerTesting, + routerUpgrade, + serviceWorker, + upgrade, + upgradeStatic, + upgradeTesting, +}; diff --git a/integration/typings_test_ts35/package.json b/integration/typings_test_ts35/package.json new file mode 100644 index 0000000000..4df5537743 --- /dev/null +++ b/integration/typings_test_ts35/package.json @@ -0,0 +1,30 @@ +{ + "name": "angular-integration", + "description": "Assert that users with TypeScript 3.5 can type-check an Angular application", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@angular/animations": "file:../../dist/packages-dist/animations", + "@angular/common": "file:../../dist/packages-dist/common", + "@angular/compiler": "file:../../dist/packages-dist/compiler", + "@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli", + "@angular/core": "file:../../dist/packages-dist/core", + "@angular/elements": "file:../../dist/packages-dist/elements", + "@angular/forms": "file:../../dist/packages-dist/forms", + "@angular/platform-browser": "file:../../dist/packages-dist/platform-browser", + "@angular/platform-browser-dynamic": "file:../../dist/packages-dist/platform-browser-dynamic", + "@angular/platform-server": "file:../../dist/packages-dist/platform-server", + "@angular/platform-webworker": "file:../../dist/packages-dist/platform-webworker", + "@angular/platform-webworker-dynamic": "file:../../dist/packages-dist/platform-webworker-dynamic", + "@angular/router": "file:../../dist/packages-dist/router", + "@angular/service-worker": "file:../../dist/packages-dist/service-worker", + "@angular/upgrade": "file:../../dist/packages-dist/upgrade", + "@types/jasmine": "2.5.41", + "rxjs": "file:../../node_modules/rxjs", + "typescript": "3.5.3", + "zone.js": "file:../../node_modules/zone.js" + }, + "scripts": { + "test": "tsc" + } +} diff --git a/integration/typings_test_ts35/tsconfig.json b/integration/typings_test_ts35/tsconfig.json new file mode 100644 index 0000000000..5ad151541f --- /dev/null +++ b/integration/typings_test_ts35/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "module": "commonjs", + "moduleResolution": "node", + "outDir": "../../dist/typings_test_ts32/", + "rootDir": ".", + "target": "es5", + "lib": [ + "es5", + "dom", + "es2015.collection", + "es2015.iterable", + "es2015.promise" + ], + "types": [], + "strictNullChecks": true + }, + "files": [ + "include-all.ts", + "node_modules/@types/jasmine/index.d.ts" + ] +} diff --git a/package.json b/package.json index 2593cea406..86e953ef30 100644 --- a/package.json +++ b/package.json @@ -105,10 +105,10 @@ "source-map": "^0.6.1", "source-map-support": "0.5.9", "systemjs": "0.18.10", - "tsickle": "0.34.3", + "tsickle": "0.36.0", "tslib": "^1.9.0", "tslint": "5.7.0", - "typescript": "~3.4.2", + "typescript": "~3.5.3", "xhr2": "0.1.4", "yargs": "13.1.0", "zone.js": "^0.9.1" diff --git a/packages/bazel/package.json b/packages/bazel/package.json index 1863feace1..eef4df0f50 100644 --- a/packages/bazel/package.json +++ b/packages/bazel/package.json @@ -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", diff --git a/packages/bazel/test/ng_package/example_package.golden b/packages/bazel/test/ng_package/example_package.golden index e757c16e82..b8ddb720ab 100644 --- a/packages/bazel/test/ng_package/example_package.golden +++ b/packages/bazel/test/ng_package/example_package.golden @@ -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 */ /** diff --git a/packages/benchpress/src/metric/user_metric.ts b/packages/benchpress/src/metric/user_metric.ts index fe253d913d..0adf2f08ef 100644 --- a/packages/benchpress/src/metric/user_metric.ts +++ b/packages/benchpress/src/metric/user_metric.ts @@ -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; }); diff --git a/packages/common/testing/src/mock_platform_location.ts b/packages/common/testing/src/mock_platform_location.ts index fc0819d825..4f7c156022 100644 --- a/packages/common/testing/src/mock_platform_location.ts +++ b/packages/common/testing/src/mock_platform_location.ts @@ -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('MOCK_PLATFORM_LOCATION_CONFIG'); /** * Mock implementation of URL state. diff --git a/packages/compiler-cli/package.json b/packages/compiler-cli/package.json index c5602dfa08..e99c91773d 100644 --- a/packages/compiler-cli/package.json +++ b/packages/compiler-cli/package.json @@ -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" diff --git a/packages/compiler-cli/src/main.ts b/packages/compiler-cli/src/main.ts index 050d6d089e..0212bc5c12 100644 --- a/packages/compiler-cli/src/main.ts +++ b/packages/compiler-cli/src/main.ts @@ -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, }); diff --git a/packages/compiler-cli/src/metadata/schema.ts b/packages/compiler-cli/src/metadata/schema.ts index 5a5d7d281b..ec2ed8ad1c 100644 --- a/packages/compiler-cli/src/metadata/schema.ts +++ b/packages/compiler-cli/src/metadata/schema.ts @@ -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) { diff --git a/packages/compiler-cli/src/transformers/program.ts b/packages/compiler-cli/src/transformers/program.ts index 0935a87b30..92d3f618dc 100644 --- a/packages/compiler-cli/src/transformers/program.ts +++ b/packages/compiler-cli/src/transformers/program.ts @@ -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[]; diff --git a/packages/compiler-cli/test/diagnostics/check_types_spec.ts b/packages/compiler-cli/test/diagnostics/check_types_spec.ts index 16e735939f..de0810397b 100644 --- a/packages/compiler-cli/test/diagnostics/check_types_spec.ts +++ b/packages/compiler-cli/test/diagnostics/check_types_spec.ts @@ -771,12 +771,6 @@ describe('ng type checker', () => { '
{{"hello" | aPipe}}
', `Argument of type '"hello"' is not assignable to parameter of type 'number'.`, '0:5'); }); - it('should report an index into a map expression', () => { - rejectOnlyWithFullTemplateTypeCheck( - '
{{ {a: 1}[name] }}
', - `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( '
{{aDir.fname}}
', diff --git a/packages/compiler-cli/test/metadata/collector_spec.ts b/packages/compiler-cli/test/metadata/collector_spec.ts index 5e0b7cec2c..e0263eedf8 100644 --- a/packages/compiler-cli/test/metadata/collector_spec.ts +++ b/packages/compiler-cli/test/metadata/collector_spec.ts @@ -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, } }); }); diff --git a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts index 20acac08a1..50f0e7b02b 100644 --- a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts +++ b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts @@ -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(); diff --git a/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts b/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts index b98da28b22..ed4fe3b5ae 100644 --- a/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts +++ b/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts @@ -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) { diff --git a/packages/core/src/event_emitter.ts b/packages/core/src/event_emitter.ts index 7c212c160b..9dc180dadc 100644 --- a/packages/core/src/event_emitter.ts +++ b/packages/core/src/event_emitter.ts @@ -56,7 +56,7 @@ import {Subject, Subscription} from 'rxjs'; * * @publicApi */ -export class EventEmitter extends Subject { +export class EventEmitter extends Subject { // 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 diff --git a/packages/core/src/linker/element_ref.ts b/packages/core/src/linker/element_ref.ts index 523b302ab6..81eb088558 100644 --- a/packages/core/src/linker/element_ref.ts +++ b/packages/core/src/linker/element_ref.ts @@ -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 { +export class ElementRef { /** * 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). diff --git a/packages/forms/test/form_array_spec.ts b/packages/forms/test/form_array_spec.ts index 2066283b3a..6bac92e453 100644 --- a/packages/forms/test/form_array_spec.ts +++ b/packages/forms/test/form_array_spec.ts @@ -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(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; diff --git a/packages/forms/test/form_control_spec.ts b/packages/forms/test/form_control_spec.ts index b56ce8edd6..0cf27f38cb 100644 --- a/packages/forms/test/form_control_spec.ts +++ b/packages/forms/test/form_control_spec.ts @@ -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(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; diff --git a/packages/forms/test/form_group_spec.ts b/packages/forms/test/form_group_spec.ts index eef495c4b9..e72e5cfb48 100644 --- a/packages/forms/test/form_group_spec.ts +++ b/packages/forms/test/form_group_spec.ts @@ -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(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; diff --git a/packages/forms/test/reactive_integration_spec.ts b/packages/forms/test/reactive_integration_spec.ts index 22a1c16191..592f1c52ef 100644 --- a/packages/forms/test/reactive_integration_spec.ts +++ b/packages/forms/test/reactive_integration_spec.ts @@ -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(res => { resolve = res; }); const res = (c.value == expectedValue) ? null : {'uniqLogin': true}; setTimeout(() => resolve(res), timeout); return promise; diff --git a/packages/platform-webworker/src/web_workers/shared/post_message_bus.ts b/packages/platform-webworker/src/web_workers/shared/post_message_bus.ts index dfb01bc6e4..a073af23ac 100644 --- a/packages/platform-webworker/src/web_workers/shared/post_message_bus.ts +++ b/packages/platform-webworker/src/web_workers/shared/post_message_bus.ts @@ -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 { diff --git a/packages/platform-webworker/src/worker_app.ts b/packages/platform-webworker/src/worker_app.ts index 987e613586..d467680b40 100644 --- a/packages/platform-webworker/src/worker_app.ts +++ b/packages/platform-webworker/src/worker_app.ts @@ -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]) => { (postMessage)(message, transferrables); } }; diff --git a/packages/platform-webworker/src/worker_render.ts b/packages/platform-webworker/src/worker_render.ts index b03dbb7776..724a913c2d 100644 --- a/packages/platform-webworker/src/worker_render.ts +++ b/packages/platform-webworker/src/worker_render.ts @@ -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); diff --git a/packages/platform-webworker/test/web_workers/shared/message_bus_util.ts b/packages/platform-webworker/test/web_workers/shared/message_bus_util.ts index 5b14c33b7a..74fbe0b6f3 100644 --- a/packages/platform-webworker/test/web_workers/shared/message_bus_util.ts +++ b/packages/platform-webworker/test/web_workers/shared/message_bus_util.ts @@ -32,5 +32,5 @@ class MockPostMessage { } } - postMessage(data: any, transfer?: [ArrayBuffer]): void { this._listener({data: data}); } + postMessage(data: any, transfer?: [Transferable]): void { this._listener({data: data}); } } diff --git a/packages/service-worker/config/src/generator.ts b/packages/service-worker/config/src/generator.ts index 0de825a65f..f3a163f30d 100644 --- a/packages/service-worker/config/src/generator.ts +++ b/packages/service-worker/config/src/generator.ts @@ -151,7 +151,7 @@ function joinUrls(a: string, b: string): string { } function withOrderedKeys(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; } diff --git a/packages/service-worker/test/integration_spec.ts b/packages/service-worker/test/integration_spec.ts index 305481d42f..25544f9406 100644 --- a/packages/service-worker/test/integration_spec.ts +++ b/packages/service-worker/test/integration_spec.ts @@ -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 !; diff --git a/packages/service-worker/testing/mock.ts b/packages/service-worker/testing/mock.ts index bf1540a9db..95a458da10 100644 --- a/packages/service-worker/testing/mock.ts +++ b/packages/service-worker/testing/mock.ts @@ -28,7 +28,7 @@ export class MockServiceWorkerContainer { mockRegistration: MockServiceWorkerRegistration|null = null; controller: MockServiceWorker|null = null; messages = new Subject(); - notificationClicks = new Subject(); + notificationClicks = new Subject<{}>(); addEventListener(event: 'controllerchange'|'message', handler: Function) { if (event === 'controllerchange') { diff --git a/tools/public_api_guard/common/testing.d.ts b/tools/public_api_guard/common/testing.d.ts index 844fd24bd0..11002fcd55 100644 --- a/tools/public_api_guard/common/testing.d.ts +++ b/tools/public_api_guard/common/testing.d.ts @@ -1,4 +1,4 @@ -export declare const MOCK_PLATFORM_LOCATION_CONFIG: InjectionToken<{}>; +export declare const MOCK_PLATFORM_LOCATION_CONFIG: InjectionToken; export declare class MockLocationStrategy extends LocationStrategy { internalBaseHref: string; diff --git a/tools/public_api_guard/core/core.d.ts b/tools/public_api_guard/core/core.d.ts index dfac6d15f5..6dc6691519 100644 --- a/tools/public_api_guard/core/core.d.ts +++ b/tools/public_api_guard/core/core.d.ts @@ -309,7 +309,7 @@ export interface DoCheck { ngDoCheck(): void; } -export declare class ElementRef { +export declare class ElementRef { nativeElement: T; constructor(nativeElement: T); } @@ -325,7 +325,7 @@ export declare class ErrorHandler { handleError(error: any): void; } -export declare class EventEmitter extends Subject { +export declare class EventEmitter extends Subject { __isAsync: boolean; constructor(isAsync?: boolean); emit(value?: T): void; @@ -1089,7 +1089,7 @@ export declare function ɵɵstylingApply(): void; export declare function ɵɵtemplate(index: number, templateFn: ComponentTemplate | null, consts: number, vars: number, tagName?: string | null, attrs?: TAttributes | null, localRefs?: string[] | null, localRefExtractor?: LocalRefExtractor): void; -export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: LView): ViewEngine_TemplateRef<{}> | null; +export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: LView): ViewEngine_TemplateRef | null; export declare function ɵɵtext(index: number, value?: any): void; diff --git a/tools/public_api_guard/forms/forms.d.ts b/tools/public_api_guard/forms/forms.d.ts index f9e915c065..577885628b 100644 --- a/tools/public_api_guard/forms/forms.d.ts +++ b/tools/public_api_guard/forms/forms.d.ts @@ -241,7 +241,7 @@ export declare class FormControlDirective extends NgControl implements OnChanges isDisabled: boolean; /** @deprecated */ model: any; readonly path: string[]; - /** @deprecated */ update: EventEmitter<{}>; + /** @deprecated */ update: EventEmitter; readonly validator: ValidatorFn | null; viewModel: any; constructor(validators: Array, asyncValidators: Array, valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null); @@ -257,7 +257,7 @@ export declare class FormControlName extends NgControl implements OnChanges, OnD /** @deprecated */ model: any; name: string; readonly path: string[]; - /** @deprecated */ update: EventEmitter<{}>; + /** @deprecated */ update: EventEmitter; readonly validator: ValidatorFn | null; constructor(parent: ControlContainer, validators: Array, asyncValidators: Array, valueAccessors: ControlValueAccessor[], _ngModelWarningConfig: string | null); ngOnChanges(changes: SimpleChanges): void; @@ -301,7 +301,7 @@ export declare class FormGroupDirective extends ControlContainer implements Form directives: FormControlName[]; form: FormGroup; readonly formDirective: Form; - ngSubmit: EventEmitter<{}>; + ngSubmit: EventEmitter; readonly path: string[]; readonly submitted: boolean; constructor(_validators: any[], _asyncValidators: any[]); @@ -374,7 +374,7 @@ export declare class NgForm extends ControlContainer implements Form, AfterViewI }; form: FormGroup; readonly formDirective: Form; - ngSubmit: EventEmitter<{}>; + ngSubmit: EventEmitter; options: { updateOn?: FormHooks; }; @@ -415,7 +415,7 @@ export declare class NgModel extends NgControl implements OnChanges, OnDestroy { updateOn?: FormHooks; }; readonly path: string[]; - update: EventEmitter<{}>; + update: EventEmitter; readonly validator: ValidatorFn | null; viewModel: any; constructor(parent: ControlContainer, validators: Array, asyncValidators: Array, valueAccessors: ControlValueAccessor[]); diff --git a/tools/ts-api-guardian/package.json b/tools/ts-api-guardian/package.json index 9ea00518b4..9870dbb7d8 100644 --- a/tools/ts-api-guardian/package.json +++ b/tools/ts-api-guardian/package.json @@ -17,7 +17,7 @@ "test": "test" }, "peerDependencies": { - "typescript": "~3.4.0" + "typescript": "~3.5.3" }, "dependencies": { "chalk": "^2.3.1", @@ -33,7 +33,7 @@ "chai": "^4.1.2", "jasmine": "^3.1.0", "source-map-support": "^0.5.9", - "typescript": "~3.4.2" + "typescript": "~3.5.3" }, "repository": {}, "keywords": [ diff --git a/yarn.lock b/yarn.lock index 61e21fe481..b1a2b4ccd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10967,10 +10967,10 @@ try-require@^1.0.0: resolved "https://registry.yarnpkg.com/try-require/-/try-require-1.2.1.tgz#34489a2cac0c09c1cc10ed91ba011594d4333be2" integrity sha1-NEiaLKwMCcHMEO2RugEVlNQzO+I= -tsickle@0.34.3: - version "0.34.3" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.34.3.tgz#8085067a26d7bff466ddadb2eba18849b49159b8" - integrity sha512-mb1v3nsr6rYaZky22xj0d6qv4ogAR40Bc6r37jwWOg3bEIO/ZppEFZiEADs/NNVLcWTPgmNmPZgaX5CfAH6oXA== +tsickle@0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.36.0.tgz#d6f47cdd14d009f3fea4e8516cd46c1393f3aa02" + integrity sha512-lrEMU5e+efx5DXtrRSGsxgkCOVRw4WeVaOkQ2pMIxCZDY5rISagVyP4yi7t6M396POFSbMHgQMT/vz0HmfxWVA== dependencies: minimist "^1.2.0" mkdirp "^0.5.1" @@ -11105,10 +11105,10 @@ typescript@~3.1.6: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68" integrity sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA== -typescript@~3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.2.tgz#9ed4e6475d906f589200193be056f5913caed481" - integrity sha512-Og2Vn6Mk7JAuWA1hQdDQN/Ekm/SchX80VzLhjKN9ETYrIepBFAd8PkOdOTK2nKt0FCkmMZKBJvQ1dV1gIxPu/A== +typescript@~3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== uglify-js@1.2.6, uglify-js@~1.2.5: version "1.2.6"