From 2807d4ba8927720f2965826dd168f56c697ddfa9 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 3 Feb 2025 16:26:54 -0800 Subject: [PATCH] [flow] Add test showing spurious spreading error with StringPrefix Summary: Showing an incompleteness where spreads including a StringPrefix are not taken into account against other properties. We can do better by evaluating the string prefix against the remaining properties. Changelog: [internal] Reviewed By: SamChou19815 Differential Revision: D69073157 fbshipit-source-id: 42f1f9df0d5ca27f43c3b75bb2fcfa363bd38b78 --- tests/string_type_utils/prefix.js | 7 +++++++ tests/string_type_utils/string_type_utils.exp | 20 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/string_type_utils/prefix.js b/tests/string_type_utils/prefix.js index c49930c8ddd..ba6fb2a9884 100644 --- a/tests/string_type_utils/prefix.js +++ b/tests/string_type_utils/prefix.js @@ -113,3 +113,10 @@ type RemainderTypeErr = StringPrefix<'foo', 1>; // ERROR x as "2"; // OK x as "3"; // ERROR } + +type SpreadOverOptionalProperies = StringPrefix<'foo'>; +{ + const obj: {[SpreadOverOptionalProperies]: number} = {foo: 1}; + const objCopy: {[SpreadOverOptionalProperies]: number, bar?: number} = {...obj}; // TODO: NO ERROR + +} diff --git a/tests/string_type_utils/string_type_utils.exp b/tests/string_type_utils/string_type_utils.exp index 34f3cea6ae1..819f2d5252a 100644 --- a/tests/string_type_utils/string_type_utils.exp +++ b/tests/string_type_utils/string_type_utils.exp @@ -404,6 +404,24 @@ References: ^^^ [2] +Error ------------------------------------------------------------------------------------------------- prefix.js:120:74 + +Cannot assign object literal to `objCopy` because string `bar` [1] is incompatible with string prefixed with `foo` [2] +in the indexer property's key. [incompatible-type] + + prefix.js:120:74 + 120| const objCopy: {[SpreadOverOptionalProperies]: number, bar?: number} = {...obj}; // TODO: NO ERROR + ^^^^^^^^ + +References: + prefix.js:120:18 + 120| const objCopy: {[SpreadOverOptionalProperies]: number, bar?: number} = {...obj}; // TODO: NO ERROR + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [1] + prefix.js:119:16 + 119| const obj: {[SpreadOverOptionalProperies]: number} = {foo: 1}; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [2] + + Error ---------------------------------------------------------------------------------------------------- suffix.js:6:1 Cannot cast empty string to `Percent` because string [1] is incompatible with string suffixed with `%` [2]. @@ -683,4 +701,4 @@ References: -Found 46 errors +Found 47 errors