当前位置: 首页 > 面试题库 >

TypeScript部分接口对象

狄飞尘
2023-03-14
问题内容

在React中,Component定义看起来像这样:

class Component<S> {
    state:S;
    setState(state:S):void;
}

然后定义一个这样的组件

interface MyState {
    name: string;
    age: number;
}
class MyComponent extends Component<MyState> { }

现在我遇到的问题是,在React API setState中应该使用 局部 状态对象来调用,该对象表示要更新的属性,如下所示:

setState({name: "Aaron"});

请注意,age未声明。我的问题是TypeScript不允许这样做,它给出了类似的赋值错误Property 'age' is missing。据我了解,从react.d.ts这个意义上讲,定义是错误的。但是有解决方案吗?

我尝试了这个:

setState({name: "Aaron"} as MyState);

但这会产生相同的错误,即使它在Playground中运行时也不会给出错误。为什么在操场上能用?有任何想法吗?


问题答案:

react.d.ts定义确实是错误的,只有在支持Partial
Types
之前,才能将其固定。

问题在于,setState需要采用部分状态,这是与正常状态不同的类型。您可以通过手动指定两种类型来解决此问题:

interface MyState {
    name: string;
    age: number;
}

interface PartialMyState {
    name?: string;
    age?: number;
}

并手动声明MyComponent而不扩展提供的React Component类:

class MyComponent {
    state: MyState;
    setState(state:PartialMyState): void;
    //...
}

这意味着您必须为Component代码中的每个子类重复这些函数定义。您可以通过定义Component由附加的部分状态类型概括的正确类来避免这种情况:

class CorrectComponent<S,P> { // generalized over both state and partial state
    state:S;
    setState(state:P):void;
    //...
}

class MyComponent extends CorrectComponent<MyState,PartialMyState> { }

您仍然必须为每种状态类型编写部分版本。

另外,您可以通过将setState非参数类型的参数类型更改为来使其安全Object



 类似资料:
  • 主要内容:TypeScript,JavaScript,联合类型和接口,TypeScript,JavaScript,接口和数组,实例,实例,TypeScript,接口继承,TypeScript,JavaScript,TypeScript,JavaScript接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。 TypeScript 接口定义如下: 实例 以下实例中,我们定义了一个接口 IPe

  • 本文向大家介绍TypeScript 类接口,包括了TypeScript 类接口的使用技巧和注意事项,需要的朋友参考一下 示例 public在接口中声明变量和方法,以定义其他打字稿代码如何与之交互。 在这里,我们创建一个实现接口的类。 该示例说明如何创建一个接口ISampleClassInterface和一类SampleClass是implements接口。

  • 本节介绍 TypeScript 各种类型接口的声明及其使用方法,接口在 TypeScript 中是极其重要的,我们使用接口来定义契约,如类型命名、属性检查、函数类型定义等。 在下一节学习完类之后,你会知道类也可以作为接口来使用。接口的种类繁多,在学习过程中一定要亲手编写,以达到灵活使用。 1. 慕课解释 TypeScript 的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法

  • 删除动态 申请动态置顶 申请动态评论置顶 通过评论置顶 拒绝评论置顶 删除动态 DELETE /feeds/:feed/currency Response Status: 204 No Content 申请动态置顶 POST /feeds/:feed/currency-pinneds Input 名称 类型 描述 amount Integer 必须,置顶总价格,积分。 day Integer

  • 本文向大家介绍TypeScript 通用接口,包括了TypeScript 通用接口的使用技巧和注意事项,需要的朋友参考一下 示例 声明通用接口 具有多个类型参数的通用接口 实施通用接口 用泛型类实现它: 用非泛型类实现它: