From 50d242d0853d8294e3770bb1b502cdfbee65c03b Mon Sep 17 00:00:00 2001 From: Ika Date: Sat, 30 Jun 2018 09:10:56 +0800 Subject: [PATCH] feat(typescript): support TSOptionalType and TSRestType (#4757) Ref: Microsoft/TypeScript#24897 --- package.json | 2 +- src/language-js/printer-estree.js | 4 ++++ .../__snapshots__/jsfmt.spec.js.snap | 8 ++++++++ tests/typescript_optional_type/jsfmt.spec.js | 1 + tests/typescript_optional_type/simple.ts | 1 + .../typescript_rest_type/__snapshots__/jsfmt.spec.js.snap | 8 ++++++++ tests/typescript_rest_type/jsfmt.spec.js | 1 + tests/typescript_rest_type/simple.ts | 1 + yarn.lock | 6 +++--- 9 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 tests/typescript_optional_type/__snapshots__/jsfmt.spec.js.snap create mode 100644 tests/typescript_optional_type/jsfmt.spec.js create mode 100644 tests/typescript_optional_type/simple.ts create mode 100644 tests/typescript_rest_type/__snapshots__/jsfmt.spec.js.snap create mode 100644 tests/typescript_rest_type/jsfmt.spec.js create mode 100644 tests/typescript_rest_type/simple.ts diff --git a/package.json b/package.json index ab73c8123..960342568 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "resolve": "1.5.0", "semver": "5.4.1", "string-width": "2.1.1", - "typescript": "3.0.0-dev.20180602", + "typescript": "3.0.0-dev.20180626", "typescript-eslint-parser": "eslint/typescript-eslint-parser#42f29a1db5c51262fd9ed2d6105015da8925ba2d", "unicode-regex": "1.0.1", "unified": "6.1.6", diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 4aa6cea34..884c6341b 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -2490,6 +2490,10 @@ function printPathNoParens(path, options, print, args) { return group(concat(parts)); } + case "TSRestType": + return concat(["...", path.call(print, "typeAnnotation")]); + case "TSOptionalType": + return concat([path.call(print, "typeAnnotation"), "?"]); case "FunctionTypeParam": return concat([ path.call(print, "name"), diff --git a/tests/typescript_optional_type/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_optional_type/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..821b72390 --- /dev/null +++ b/tests/typescript_optional_type/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`simple.ts 1`] = ` +type X = [number, string?]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +type X = [number, string?]; + +`; diff --git a/tests/typescript_optional_type/jsfmt.spec.js b/tests/typescript_optional_type/jsfmt.spec.js new file mode 100644 index 000000000..2ea3bb6eb --- /dev/null +++ b/tests/typescript_optional_type/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["typescript"]); diff --git a/tests/typescript_optional_type/simple.ts b/tests/typescript_optional_type/simple.ts new file mode 100644 index 000000000..317041749 --- /dev/null +++ b/tests/typescript_optional_type/simple.ts @@ -0,0 +1 @@ +type X = [number, string?]; diff --git a/tests/typescript_rest_type/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_rest_type/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..dda6fbb62 --- /dev/null +++ b/tests/typescript_rest_type/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`simple.ts 1`] = ` +type X = [...number[]]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +type X = [...number[]]; + +`; diff --git a/tests/typescript_rest_type/jsfmt.spec.js b/tests/typescript_rest_type/jsfmt.spec.js new file mode 100644 index 000000000..2ea3bb6eb --- /dev/null +++ b/tests/typescript_rest_type/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["typescript"]); diff --git a/tests/typescript_rest_type/simple.ts b/tests/typescript_rest_type/simple.ts new file mode 100644 index 000000000..be2de1328 --- /dev/null +++ b/tests/typescript_rest_type/simple.ts @@ -0,0 +1 @@ +type X = [...number[]]; diff --git a/yarn.lock b/yarn.lock index 633f5be15..d553d834b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5747,9 +5747,9 @@ typescript-eslint-parser@eslint/typescript-eslint-parser#42f29a1db5c51262fd9ed2d lodash.unescape "4.0.1" semver "5.5.0" -typescript@3.0.0-dev.20180602: - version "3.0.0-dev.20180602" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.0-dev.20180602.tgz#ca368c199b4e3cbfd25b82ecece3f2b13349c893" +typescript@3.0.0-dev.20180626: + version "3.0.0-dev.20180626" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.0-dev.20180626.tgz#fb6be91cfc8e8757d551e83af208d0083be61499" ua-parser-js@^0.7.9: version "0.7.17"