Skip to content

Google feedback on TS 4.7-beta #48848

Description

@frigus02

This GitHub issue contains feedback on the TS 4.7-beta release from the team that is responsible for keeping Google's internal software working with the latest version of TypeScript.

Executive summary

  • Some changes to our TypeScript code are required to make it compile with TS 4.7.
  • Detail sections below explain the changes to our code we expect to make to unblock the upgrade.

Impact summary

Change descriptionAnnouncedLibraries affected
Type Parameter No Longer Assignable to {} in strictNullChecksyes0.24%
lib/d.ts changesyes0.022%
TS2774 & TS2801 now fire for secondary conditions in if statementsno0.017%
TS2731 now fires for keyof Tno0.008%
Unclassified-0.014%

The Announced column indicates whether we were able to connect the observed change with a section in the TS4.7-beta announcement.

The following sections give more detailed explanations of the changes listed above.

Changes which were announced

Type Parameter No Longer Assignable to {} in strictNullChecks

We see type errors similar to the ones mentioned in the release announcement.

We're looking into adding extends object to generic type parameters where possible and casts to any to silence the error everywhere else.

lib/d.ts changes

We support the typing improvements. Generally it's clear what's changing.

We observed the following breakdown within this category:

  • fetch now also accepts URL in addition to RequestInfo for the first parameter

  • AbortSignal has additional members reason and throwIfAborted

  • ImageData has additional member colorSpace

  • HTMLVideoElement has additional members requestVideoFrameCallback and cancelVideoFrameCallback

  • Object.assign now rejects null/undefined for the first parameter

  • Object.freeze has an additional overload, which causes some type errors like:

    interfaceData{prop: Array<'a'|'b'>}exportconstDATA: Data=Object.freeze({prop: ['a']});// ^^^^ Type 'Readonly<{ prop: string[]; }>' is not assignable to type 'Data'.

We expect to add casts to any to silence the error and apply proper fixes over time.

Changes which were not announced

TS2774 & TS2801 now fire for secondary conditions in if statements

This wasn't specifically mentioned in the release announcement, but looks like a decent improvement. Example:

declareletflag: boolean;declarefunctionfoo(): void;declarefunctionbar(): Promise<void>;if(flag&&foo)foo();// ^^^ This condition will always return true since this function is always defined. Did you mean to call it instead?(2774)if(flag&&bar()){}// ^^^^^ This condition will always return true since this 'Promise<void>' is always defined.(2801)

We expect to add casts to any to silence the error and apply proper fixes over time.

TS2731 now fires for keyof T

This wasn't specifically mentioned in the release announcement, but looks like a decent improvement. Example:

functionfoo<T>(key: keyofT){console.log(`Key: "${key}"`);// ^^^ Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'.(2731)}

We expect to add casts to any to silence the error and apply proper fixes over time.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

DiscussionIssues which may not have code impact

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions