NSj*_*nas 9 typescript mapped-types
鉴于此代码:
interface Foo{
one?: string;
two?: string;
}
type Foo2 = {
[P in keyof Foo]: number;
}
Run Code Online (Sandbox Code Playgroud)
我希望类型Foo2是{ one: number; two: number; } 但是,它似乎保持可选修饰符{ one?: number; two?: number; }
使用映射类型时是否可以删除可选修饰符?
Tit*_*mir 17
在Typescript 2.8中,您可以明确地消除修饰符:
type Foo2 = {
[P in keyof Foo]-?: number;
}
Run Code Online (Sandbox Code Playgroud)
或者使用Required内置于较新版本的类型.
如果您使用的是旧版本,则可以使用此解决方法:
type Helper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P] };
type Foo3 = Helper<Foo, keyof Foo>;
Run Code Online (Sandbox Code Playgroud)
您可以Required<T>替代-?
interface Foo {
one?: string;
two?: string;
}
type Foo2 = {
[P in keyof Required<Foo>]: number;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |