-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Description
TC39 Update
- Class fields to stage 4
useDefineForClassFields?- Nicer emit ESNext, ES2022
- Import assertions
- Semantics are implementation-defined
- Uh, so just parse and do nothing with it?
- Strange.
Optional vs undefined
-
Can't distinguish whether a property is present vs. when it's undefined.
-
Comes up in functions like React's
setState.-
You don't want certain properties to be explicitly
undefined.setStatejust allows you to omit properties of existing state. -
Specifically:
this.setState({ foo: "hello", bar: undefined });
has a different meaning in React than
this.setState({ foo: "hello" });
-
-
Previously were considering
missingas an alternative toundefinedto describe the distinction. It's kind of messy and confusing for people to have another type. -
Idea: have
undefinedaffect reading values (i.e. read side of a type), write type only describes the explicitly given type.- Means
obj.a = obj.ais not always allowed! But kind of correct. - This behavior now also allows you to narrow by
inand then perform theobj.a = obj.aassignment.
- Means
-
Breaking change - but if we did it all over again, we'd do it this way.
- So
strictflag?
- So
-
Automated addition of
| undefinedto a property avoids breaking changes. -
Maybe the case that optionality not including an explicit
undefinedis actually what users meant...but maybe not really? Many (most?) programs probably just check the value of a property.- Similar to whether you want to have an "optional" type that doesn't distinguish between
nullandundefined. Most programs don't care, but it was useful for us to distinguish between that!
- Similar to whether you want to have an "optional" type that doesn't distinguish between
-
Ship a codemod?
-
Do we support
deletein control flow analysis?- Don't think so.
- This might kind of force people to do that?
- Could consider doing it.
-
Could also have
?to mark optionality on an index signature which piece-meal allows you to opt intonoUncheckedIndexedAccess. -
Very hard to understand how this works on higher-order with mapped types (e.g.
Partial,Pick,Required). -
A way to opt into new semantics?
??{ x??: string }
-
Mapped types?
type Partial<T> = { [K in keyof T]?: T[K] }
- Does this mean partial includes undefined in every property? Does this break existing code that assumes otherwise?
- Could have a default type argument that specifies whether you wanted to include
undefinedor not.
TSConfig Categorization
- We like it generally.
- Command line?
- Make sure flags all have
-- - No "from", just "values", "arguments", "one of" for option values?
- Make sure flags all have