In Typescript 2.8, you can explicitly exclude the modifier:
type Foo2 = {
[P in keyof Foo]-?: number;
}
Or use a type Requiredthat is built into newer versions.
If you are using an older version, you can use this workaround:
type Helper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P] };
type Foo3 = Helper<Foo, keyof Foo>;
source
share