Rod*_*igo 5 module initialization interface typescript
假设我在模块中有一个 TypeScript 接口,还有一个返回该接口的初始化对象的函数:
export default interface Foo {
name: string;
surname: string;
cars: number;
};
export function newFoo(): foo {
return <Foo>{
name: '',
surname: '',
cars: 0
};
};
Run Code Online (Sandbox Code Playgroud)
问题是我将所有字段都输入两次,这不仅很无聊,而且还容易出错。
我无法真正使用return <Foo>{};,因为有些对象是其他对象的成员,所以我会丢失属性并undefined弹出。
我可以在调用该属性时检查该属性是否存在,但由于该属性没有?,这意味着它是强制性的,因此它应该存在。
那么,上面的代码有没有更好的写法呢?
您可以反转键入Foo和 函数的方式,并且可以Foo是 的返回类型newFoo:
export type Foo = ReturnType<typeof newFoo>
export function newFoo() {
return {
name: '',
surname: '',
cars: 0
};
};
Run Code Online (Sandbox Code Playgroud)
如果您希望某些成员是可选的或不由其初始化newFoo,则必须做一些工作来添加这些成员,尽管这对于复杂的情况可能有点过大:
export type Foo = ReturnType<typeof newFoo>
export function newFoo() {
const optionalInitiazlised = {
optionaButInited: ""
}
return Object.assign(optionalInitiazlised as Partial<typeof optionalInitiazlised>,
{} as { optionalProp?: string }, {
name: '',
surname: '',
cars: 0
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |