I came across this line in the type definitions for prop-types
:
export type ValidationMap<T> = { [K in keyof T]-?: Validator<T[K]> };
Without -
it would be a pretty standard partial mapped type, but I can't find anywhere in the docs where it talks about -?
.
Can anyone explain what -?
means?
What does ?: mean in TypeScript? Using a question mark followed by a colon ( ?: ) means a property is optional. That said, a property can either have a value based on the type defined or its value can be undefined .
What is the TypeScript exclamation mark? The non-null assertion operator tells the TypeScript compiler that a value typed as optional cannot be null or undefined . For example, if we define a variable as possibly a string or undefined, the !
The Angular safe navigation operator (?.) is a fluent and convenient way to guard against null and undefined values in property paths.
+
or -
allows control over the mapped type modifier (?
or readonly
). -?
means must be all present, aka it removes optionality (?
) e.g.:
type T = { a: string b?: string } // Note b is optional const sameAsT: { [K in keyof T]: string } = { a: 'asdf', // a is required } // Note a became optional const canBeNotPresent: { [K in keyof T]?: string } = { } // Note b became required const mustBePreset: { [K in keyof T]-?: string } = { a: 'asdf', b: 'asdf' // b became required }
I did a lesson on these mapped type modifiers : https://www.youtube.com/watch?v=0zgWo_gnzVI 🌹
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With