typescript - 为可以具有不同结构的对象参数定义类型

标签 typescript

我有一个函数以一个对象作为参数,但传递的对象可以有不同的结构。我怎样才能为参数定义一个或多个类型,而不必将任何对象属性设置为可选(因为这会使整个键入操作的用处大大降低)?

我想做的,但显然行不通,是这样的:

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);

More information about generics.

关于typescript - 为可以具有不同结构的对象参数定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61319406/

相关文章:

javascript - clickHandler 或handleClick 或onClick 或signUp 或handleSignUp 或signUpHandler?

node.js - typescript 错误找不到名称 'require'。 ionic 3

angular - 升级@ngrx/Store 时,类型 'payload' 上不存在属性 'Action'

typescript - webpack-dev-server 和 ts-loader 不会在界面更改时重新加载

sql-server - 如何使用 sequelize 在 where 对象中指定外部模型上的列?

javascript - 用 Jest 模拟条件 window.open 函数调用

typescript - `use` 指令的返回类型是什么?

javascript - nodejs 异步等待流程无法正常工作

javascript - c# 从 Angular 发送 3 个参数到 c#mvc,我在服务器端得到 null

angular - 从服务访问组件数据