javascript - TypeScript 中的条件接口(interface)

标签 javascript typescript interface

我有以下情况:两个不同的接口(interface)(A,B)和一个函数,该函数将参数 props 作为条件接口(interface)/联合类型。但如果两个接口(interface)中都没有声明,我就无法使用 prop。

Example :

interface A {
    name: string
};

interface B {
    age: number
};

function foo(props: A | B) {
    return props.name;
}

最佳答案

这是正确的 - 您不知道 name 键是否存在于您的 props 对象上。

您有两个选择:

1

function foo(props: A | B): string | undefined {
  if ('name' in props) {
    return props.name
  }
}

2.

interface A {
  name: string
  age?: undefined
}

interface B {
  name?: undefined
  age: number
}

function foo(props: A | B): string | undefined {
  return props.name
}

为什么?

Typescript 正确警告您,因为没有 name 键的对象与未定义 name 键的对象不同。想象一下:

const a = {
  // name is missing
  age: 1
}

const b = {
  name: 'test',
  age: undefined
}

Object.keys(a) == ['age']
Object.keys(b) == ['name', 'age']

if ('age' in b) {
  console.log('this is true')
}

if ('name' in a) {
  throw new Error(`This is false`)
}

关于javascript - TypeScript 中的条件接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655428/

相关文章:

java - 确保实现静态方法

javascript - 在 Javascript 中比较循环中的日期数组

javascript - typescript 定义 : same name but different types inside and outside module?

typescript - “React”已声明,但其值从未被读取

c# - 对没有公共(public)接口(interface)的多个类的强类型属性引用 (C#)

C# - 使用子类实现接口(interface)

javascript - 设置 javascript google Drive api 的搜索参数

javascript - WebCola 缺少文档

javascript - Socket.io 全局发送函数 - Node.js

javascript - Typescript - 没有参数类型为 'string' 的索引签名