小编Ser*_*nov的帖子

如何检查对象是否是联合类型之一

我有 2 个接口:TypeATypeB

我的 React 脚本接收Object类型为 的对象TypeA|TypeB

我有一个函数,doSomething(attribute:TypeA) 我想传递一个Object像这样的属性doSomething(Object),但是 TS 说

类型 'A 型 | TypeB' 不可分配给类型'TypeA'。类型“TypeB”缺少类型“TypeA”的以下属性:prop1、prop2、prop3。

也许我只能设置一个新的临时变量(如果它是类型的话)TypeA,然后将其传递给函数?

const tempVar:Type1 = Object
Run Code Online (Sandbox Code Playgroud)

我试过这个

const tempVar:Type1 = Object instanceof Type` ? Object : undefined ;
Run Code Online (Sandbox Code Playgroud)

但除了上面的错误之外我还收到这个错误

“Type1”仅指类型,但在这里用作值。

由于我无法更改函数doSomething()以接受两种类型,因此是否有解决方法?

typescript

9
推荐指数
2
解决办法
2万
查看次数

使用 TypeScript 设置 Redux、路由器和动态模块的 React-Testing-Library

我有一个小型应用程序redux-dynamic-modules,用作存储,react-router用于路由,所有组件都是带有useStateuseHistoryuseLocationuseSelector等钩子的函数组件useDispatch

我想设置react-testing-library来测试组件,正如文档中所述,我需要设置一个自定义render().

所以这是我的index.tsx

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import { Provider } from "react-redux";
import { store } from "./redux/store";


ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById("root")
);
Run Code Online (Sandbox Code Playgroud)

这是我的 App.tsx

import React from "react";
import { BrowserRouter as Router, Route } from "react-router-dom";
import { SearchPage } from "./pages/search/search-page";
import …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs redux react-testing-library redux-dynamic-modules

5
推荐指数
1
解决办法
2664
查看次数

Typescript 中可选 props 的解构

假设我有一个带有这种形状的可选道具的物体

interface MyObject {
  requiredProp: SomeType;
  optionalProp?: { 
    innerData: {
      innerProp1: string;
      innerProp2: number;
      innerProp3?: boolean;
    }
  }
}

const obj:MyObject = { ... }

Run Code Online (Sandbox Code Playgroud)

但似乎我不能轻易地破坏它optionalProp

const {innerProp1, innerProp2, innerProp3} = obj.optionalProp?.innerData;
Run Code Online (Sandbox Code Playgroud)

因为

属性“innerProp1”在类型“...”上不存在 不明确的'。

其余的解构变量也是如此。

有没有一种优雅而简短的方法来保持类型安全?

destructuring typescript

3
推荐指数
1
解决办法
4250
查看次数