我有一个函数以一个对象作为参数,但传递的对象可以有不同的结构。我怎样才能为参数定义一个或多个类型,而不必将任何对象属性设置为可选(因为这会使整个键入操作的用处大大降低)?
我想做的,但显然行不通,是这样的:
type One = {
a: string
b: string
}
type Two = {
c: string
d: string
}
type Three = {
e: string
}
type OneOfTheseTypes = One | Two | Three
const myGenericFunction = (obj: OneOfTheseTypes) => {...}
附言我刚刚开始使用 TypeScript 迈出我的第一步,所以如果我的想法有误,请原谅我!
编辑:所以该函数返回一个与参数类型相同的对象,当我使用返回的对象(如 returnedObj.a
)时,我收到错误消息“Property 'a' does not存在于类型 'OneOfTheseTypes' 上。”和“类型‘二’上不存在属性’a’。”我在 React 中使用 TypeScript,我不知道这是否与它有任何关系。
最佳答案
您问题中的示例是有效的,并且您的示例中没有编译错误。您可以直接使用 generics
轻松解决您的问题:
type One = {
a: string
b: string
}
type Two = {
c: string
d: string
}
type Three = {
e: string
}
const myGenericFunction = <T>(obj: T): T => obj;
const testObject: One = {
a: 'fieldA',
b: 'FieldB'
};
myGenericFunction<One>(testObject);
关于typescript - 为可以具有不同结构的对象参数定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61319406/