在 TypeScript 中推断对象的接口
Infer the interface of an object in TypeScript
假设我在模块中有一个 TypeScript 接口,还有一个 return 该接口的初始化对象的函数:
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
的 return 类型:
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
});
};
假设我在模块中有一个 TypeScript 接口,还有一个 return 该接口的初始化对象的函数:
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
的 return 类型:
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
});
};