在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 通用接口的使用技巧和注意事项,需要的朋友参考一下 示例 声明通用接口 具有多个类型参数的通用接口 实施通用接口 用泛型类实现它: 用非泛型类实现它: