diff --git a/changelog_unreleased/typescript/16731.md b/changelog_unreleased/typescript/16731.md new file mode 100644 index 000000000..3b798eb2b --- /dev/null +++ b/changelog_unreleased/typescript/16731.md @@ -0,0 +1,19 @@ +#### Print `declare` before accessibility in class properties (#16731 by @fisker) + + +```tsx +// Input +class A { + declare private readonly name: string; +} + +// Prettier stable +class A { + private declare readonly name: string; +} + +// Prettier main +class A { + declare private readonly name: string; +} +``` diff --git a/src/language-js/print/class.js b/src/language-js/print/class.js index 7c1f84116..e184c1329 100644 --- a/src/language-js/print/class.js +++ b/src/language-js/print/class.js @@ -231,7 +231,7 @@ function printClassProperty(path, options, print) { parts.push(printClassMemberDecorators(path, options, print)); } - parts.push(printTypeScriptAccessibilityToken(node), printDeclareToken(path)); + parts.push(printDeclareToken(path), printTypeScriptAccessibilityToken(node)); if (node.static) { parts.push("static "); diff --git a/tests/format/typescript/class/__snapshots__/format.test.js.snap b/tests/format/typescript/class/__snapshots__/format.test.js.snap index 7db846721..4cdd099ac 100644 --- a/tests/format/typescript/class/__snapshots__/format.test.js.snap +++ b/tests/format/typescript/class/__snapshots__/format.test.js.snap @@ -88,6 +88,26 @@ class B { ================================================================================ `; +exports[`declare-field.ts format 1`] = ` +====================================options===================================== +parsers: ["typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +class A { + declare private readonly name: string; + private declare readonly name2: string; +} + +=====================================output===================================== +class A { + declare private readonly name: string; + declare private readonly name2: string; +} + +================================================================================ +`; + exports[`declare-readonly-field-initializer.ts format 1`] = ` ====================================options===================================== parsers: ["typescript"] diff --git a/tests/format/typescript/class/declare-field.ts b/tests/format/typescript/class/declare-field.ts new file mode 100644 index 000000000..ba0d2a2d4 --- /dev/null +++ b/tests/format/typescript/class/declare-field.ts @@ -0,0 +1,4 @@ +class A { + declare private readonly name: string; + private declare readonly name2: string; +}