[英]Infer the interface of an object in TypeScript
假设我在一个模块中有一个 TypeScript 接口,还有一个返回该接口的初始化对象的函数:
export default interface Foo {
name: string;
surname: string;
cars: number;
};
export function newFoo(): foo {
return <Foo>{
name: '',
surname: '',
cars: 0
};
};
问题是我把所有的字段都输入了两次,这不仅很无聊,而且容易出错。
我真的不能用return <Foo>{};
因为有些情况下对象是其他对象的成员,所以我会丢失属性并弹出undefined
。
我可以在调用它时检查该属性是否存在,但是由于该属性没有?
,这意味着它是强制性的,所以它应该在那里。
那么,有没有更好的方法来编写上面的代码?
你可以颠倒你输入Foo
和函数的方式,让Foo
成为newFoo
任何返回类型:
export type Foo = ReturnType<typeof newFoo>
export function newFoo() {
return {
name: '',
surname: '',
cars: 0
};
};
如果您希望某些成员是可选的或不被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
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.