gpt4 book ai didi

reactjs - typescript :在接口(interface)中将函数作为类型传递

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:46 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何从现有的 Typescript 函数中获取类型并使用它来定义接口(interface)。我正在从事 React 项目,我想通过 action creator (函数)到 Props界面,然后作为 Component<Props, State> 进入 React 组件.

示例 Action 创建者:

export function myFunction(foo: string = "bar") {
return {
type: "EXAMPLE_ACTION",
payload: foo,
}
}

示例组件:

import React, { Component } from 'react'
import { connect } from "react-redux"
import { myFunction } from "actions"

export interface Props {
// This is what I'm trying to and and it ends up in ts error
myFunc: myFunction
}

class SomeComponent extends Component<Props, {}> {
render() {
return (
<div>
Example:
<button onClick={this.props.myFunc("baz")}>Click to dispatch</button>
</div>
)
}
}

export default connect(null, {
myFunction
})(SomeComponent)

我认为这可行,但坦率地说这是一个 typescript 错误:

[ts] Cannot find name 'myFunction'

我想知道我是否必须定义一个单独的 type将它传递给我的组件,像这样:

export type myFuncType = (foo: string) => { type: string, payload: string }
export const myFunction: myFuncType = (foo: string) => {
return {
type: "EXAMPLE_ACTION",
payload: foo,
}
}

但这似乎过于冗长和多余,需要导入另一个导出。还有其他解决办法吗?

最佳答案

您可以在类型位置中使用typeof关键字来获取命名值的类型。

在这种情况下你会写

import { myFunction } from "actions";

export interface Props {
myFunc: typeof myFunction;
}

您当前收到错误的原因是 TypeScript 有两个不同的声明空间,一个用于值,一个用于类型。 function 定义一个值而不是一个类型。

关于reactjs - typescript :在接口(interface)中将函数作为类型传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43586944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com