小编cas*_*ber的帖子

创建映射类型以保证返回值

假设我正在处理与以下接口对应的对象:

interface Foo {
    getCount(): number;
    doSomething(): boolean;
}
Run Code Online (Sandbox Code Playgroud)

它只有函数,没有一个函数是异步的。但是,我并不总是对对象进行同步访问,并且在某些情况下将处理异步版本,其中所有函数返回值都包含在 Promise 中。像这样:

interface AsyncFoo {
    getCount(): Promise<number>;
    doSomething(): Promise<boolean>;
}
Run Code Online (Sandbox Code Playgroud)

我试图创建一个映射打字原稿类型来表示这种转变,因为我有大量的对象接口,并且不想简单重复每个接口以及带最终interface [name]interface Async[name]所有原型复制的方法。

我的第一个想法是,也许我可以像这样修改接口:

type Self<T> = T;
interface Foo<S = Self> {
    getCount(): S<number>;
    doSomething(): S<boolean;
}
type AsyncFoo = Foo<Promise>;
Run Code Online (Sandbox Code Playgroud)

但是SelfPromise当我使用它们时,都需要静态地给出泛型,而不是能够以这种向后的方式使用它们。

所以接下来我尝试创建某种映射类型,例如:

type Promisify<T> = {[K in keyof T]: Promise<T[K]>}
Run Code Online (Sandbox Code Playgroud)

但是当然这将接口的每个完整方法包装在一个 Promise 中,而不仅仅是返回值,给我:

type PromisifiedFoo = {
    getCount: Promise<() => number>;
    doSomething: Promise<() => boolean>;
}
Run Code Online (Sandbox Code Playgroud)

我试图通过TPromisify …

generics typescript

4
推荐指数
1
解决办法
683
查看次数

如何在重定向时将props发送到reactjs

我正在尝试通过React Route(重定向到)重定向​​到路径时发送道具,但组件(SideBar)没有收到任何道具.我应该如何发送道具以及如何在组件中接收道具?我想从当前状态发送道具.

ParentComponent(WelcomeScreen.tsx)

render(){

    return (  
        this.state.idUser != -1 ?  <Redirect to={{
            pathname: '/Activities',
            state: { referrer: this.state.idUser }
            }}/> :   
        <div>
            {this.renderHeader()}
            <div className='screenUser'>
                {this.renderPanelUpButtons()}
                {this.renderWelcomeMenu()}
            </div>
        </div>

    );
Run Code Online (Sandbox Code Playgroud)

Activities.tsx

export interface ActivitiesProps {
idUser: number;
}

interface ActivitiesState {  
message: string;
activitiesFirstPart: IActivity[];
activitiesSecondPart: IActivity[];
}

componentWillReceiveProps(newprops : ActivitiesProps){
    if(newprops!== this.props){
        this.props = newprops;
    }

}
Run Code Online (Sandbox Code Playgroud)

这里的组件不会收到任何道具.

为了更容易理解我也把路线;

render() {
    return (
        <div className="hangouts-body">
            <div>
                <Route path="/" exact={true} component={WelcomeScreen} />
                <Route path="/Groups" exact={true} component={Groups} />
                <Route path="/Activities" exact={true} …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs react-router

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

标签 统计

typescript ×2

generics ×1

react-router ×1

reactjs ×1