New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Partial support for TypeScript 3.8 (private fields, import/export type modifier) #7631
Changes from all commits
e3fda0b
c6607e5
17b7c58
a75c8d8
305595b
41911af
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#### TypeScript 3.8 ([#7631](https://github.com/prettier/prettier/pull/7631) by [@thorn0](https://github.com/thorn0)) | ||
|
||
Prettier doesn't yet fully support the new syntax added in TypeScript 3.8: | ||
|
||
| Syntax | `typescript` parser | `babel-ts` parser | | ||
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | | ||
| [Type-Only Imports and Exports](https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/#type-only-imports-exports) | ✔️ | ❌ | | ||
| [ECMAScript Private Fields](https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/#ecmascript-private-fields) | ✔️ | ✔️ | | ||
| [`export * as ns`](https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/#export-star-as-namespace-syntax) | ❌ | ❌ | | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
class Square { | ||
#sideLength: number; | ||
thorn0 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
readonly #area: number; | ||
#unit?: string; | ||
|
||
constructor(sideLength: number, unit?: string) { | ||
this.#sideLength = sideLength; | ||
this.#area = this.#sideLength ** 2; | ||
if (unit) { | ||
this.#unit = unit; | ||
} | ||
} | ||
|
||
equals(other: any) { | ||
return this.#sideLength === other.#sideLength; | ||
} | ||
|
||
getArea() { | ||
return this.#area + (this.#unit ?? 'px') + '²'; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// TODO: uncomment when typescript-estree gets support for this syntax | ||
// export * as utilities from "./utilities.js"; | ||
j-f1 marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`type-modifier.ts 1`] = ` | ||
====================================options===================================== | ||
parsers: ["typescript"] | ||
printWidth: 80 | ||
| printWidth | ||
=====================================input====================================== | ||
export type { SomeThing }; | ||
export type { A as B }; | ||
export type { B as C } from './a'; | ||
export type { foo } from 'bar'; | ||
export type * from 'bar'; | ||
export type { foo }; | ||
|
||
// this should be treated as a normal import statement | ||
import type from './foo'; | ||
|
||
import type { SomeThing } from "./some-module.js"; | ||
import type { foo, bar } from 'baz'; | ||
import type { foo as bar } from 'baz'; | ||
import type * as foo from './bar'; | ||
import type foo from 'bar'; | ||
import type foo, { bar } from 'bar'; | ||
|
||
=====================================output===================================== | ||
export type { SomeThing }; | ||
export type { A as B }; | ||
export type { B as C } from "./a"; | ||
export type { foo } from "bar"; | ||
export type * from "bar"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @thorn0 Is this test needed? TS Playground says " There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's remove this test. Babel 7.9.0 can't parse it. |
||
export type { foo }; | ||
|
||
// this should be treated as a normal import statement | ||
import type from "./foo"; | ||
|
||
import type { SomeThing } from "./some-module.js"; | ||
import type { foo, bar } from "baz"; | ||
import type { foo as bar } from "baz"; | ||
import type * as foo from "./bar"; | ||
import type foo from "bar"; | ||
import type foo, { bar } from "bar"; | ||
|
||
================================================================================ | ||
`; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// TODO: remove disableBabelTS when Babel's TS plugin gets support for import/export `type` modifier | ||
run_spec(__dirname, ["typescript"], { disableBabelTS: true }); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
export type { SomeThing }; | ||
export type { A as B }; | ||
export type { B as C } from './a'; | ||
export type { foo } from 'bar'; | ||
export type * from 'bar'; | ||
export type { foo }; | ||
|
||
// this should be treated as a normal import statement | ||
import type from './foo'; | ||
|
||
import type { SomeThing } from "./some-module.js"; | ||
import type { foo, bar } from 'baz'; | ||
import type { foo as bar } from 'baz'; | ||
import type * as foo from './bar'; | ||
import type foo from 'bar'; | ||
import type foo, { bar } from 'bar'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
export * as ns
seems to be supported withbabel-ts
.Playground
Input:
Output
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're right. Overlooked this somehow. I'll fix the changelog.