我在我的React应用程序中使用TypeScript。我想严格检查传递给我的组件的道具类型,如果不匹配,就会抛出错误。
import React from "react";
import styles from "./ServiceDetailCard.css";
type Service = {
amount: string;
comments: string;
};
interface IProps {
service: Service;
myFunc: (count: number) => void; // The function passed from parent has different return type(boolean) and defaul param as string type. But typescript doesnt throw error.
}
class ServiceDetailCard extends React.Component<IProps, any> {
render() {
console.log(typeof this.props.service.amount); // This prints number. Typscirpt should have thrown an error since interface specified is string. But it doesnt.
return (
<div className={styles.serviceDetailCard}>
<div className={styles.amount}>
<span className={styles.figure}>{this.props.service.amount}</span>
</div>
</div>
);
}
}
export default ServiceDetailCard;
import React from "react";
import styles from "./ServiceDetails.css";
import ServiceDetailsCard from "./ServiceDetailCard";
class ServiceDetails extends React.Component {
render() {
return (
<div className={styles["service-details"]}>
{this.props.data.map((service, index) => {
service.amount = 10; // To test, manually setting amount as number so that Typescript should throw error. But it doesnt.
return <ServiceDetailsCard key={index} service={service} myFunc={test} />;
})}
</div>
);
}
}
function test(number = 10) { // To test, manually setting the default param as string so that Typescript should throw error. But it doesnt.
return true; // To test, manually setting return as boolean so that Typescript should throw error. But it doesnt.
}
export default ServiceDetails;
服务属性应该包含数量作为数字(通过接口指定),但即使我从父组件传递字符串,它也可以工作,并且typescript不会抛出错误。
同样的函数prop myFunc,它需要数字参数和返回类型是无效的。但是Im传递不同类型的默认参数,返回类型是布尔值。
为什么typescript不会抛出错误?
这是我的。tsconfig:
{
"compilerOptions": {
"outDir": "./www/",
"sourceMap": true,
"noImplicitAny": true,
"strict": true,
"strictNullChecks": true,
"module": "es6", // specify module code generation
"moduleResolution": "node",
"jsx": "react", // use typescript to transpile jsx to js
"target": "es5", // specify ECMAScript target version
"allowJs": true, // allow a partial TypeScript and JavaScript codebase
"allowSyntheticDefaultImports": true
},
"include": ["./src/**/*"]
}
请指教。
您的Service细节
没有指定道具类型,因此this.props.data
的值是any
。TypeScript不会从设置值推断类型为任何。
let services: any;
services.ammount = 42;
// services is still any, and services.ammount also is any.
要解决此问题,请声明ServiceDetails props explicit。
interface Service {
ammount: number;
}
interface ServiceDetailsProps {
services: Service[];
}
class ServiceDetails extends React.Component<ServiceDetailsProps, {}> {
...
问题内容: React事件的正确类型是什么。最初,我只是为了简单起见而使用。现在,我正在尝试清理并避免完全使用。 所以像这样一个简单的形式: 我在这里使用什么类型作为事件类型? 似乎没有工作,因为我收到一个错误消息,并且不存在。 对于所有事件的更笼统的回答,我们将不胜感激。 谢谢 问题答案: 该SyntheticEvent接口是通用的: 并且是一般约束与的交集 。 另外,由于事件是由输入元素引起的
情况: 我想做的事: 问题: 我只能指定一个propType?我如何允许两种不同的道具组合成一种? 谢谢
问题内容: npm软件包允许我们在TypeScript应用程序内部使用React。我们将组件定义为 在这里,我们必须声明组件属性和状态的类型(在类型变量中)。 在声明了这些类型之后,TypeScript将使用该类型来验证组件的用法(传递给它的道具的形状)。 我想围绕这样的组件创建一个容器。容器将重复使用组件的道具。但是,为了创建具有相同道具的另一个组件,我必须再次重新声明道具的类型。或从原始组件文
当取消序列化一个对象时,您可以使用JSON. parse中的恢复函数,就像在示例中一样。但是,您正在通过常量字符串中的名称访问对象的属性,从而失去了类型脚本的“控制”(例如,重构更改道具的名称不会反映在开关案例中)。 有没有更好的方法来使用typecript的可能性?
本文向大家介绍react-native 道具类型,包括了react-native 道具类型的使用技巧和注意事项,需要的朋友参考一下 示例 该prop-types包允许您向组件添加运行时类型检查,以确保传递给组件的道具类型正确。例如,如果不将aname或isYummyprop传递给下面的组件,它将在开发模式下引发错误。在生产模式下,不进行道具类型检查。定义propTypes可以使您的组件更具可读性和
我有一个带参数的函数。此参数必须是两种接口之一。所以我这样写: 但我收到了以下错误。 以下是接口: 因特拉加: 内溶: 我不知道有什么问题。假设函数的参数可以有两种不同的结构。我不知道为什么Tslink会标记它。 提前感谢您的帮助。