variant="standard"
value={currentGeneration.latitude}
onChange={handleGenerationFormChange}
忽略一些元素是数字而一些是字符串的事实 - 让我们假设它们都是字符串 - 我如何使用传递的名称作为接口的键来使用优雅的代码设置接口的元素?这是我的尝试:
const handleGenerationFormChange = (event:React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
let genHolder = currentGeneration;
genHolder[event.target.name as keyof GenerationInterface] = event.target.value;
但是,这会引发以下错误:
TS2322: Type 'string' is not assignable to type 'undefined'.
正确的方法是什么?
解决思路一:
您可以尝试使用通用参数:
const handleGenerationFormChange = <T extends keyof GenerationInterface>(event:React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
let genHolder = currentGeneration;
genHolder[event.target.name as T] = event.target.value as GenerationInterface[T];
解决思路二:
解决思路二:
要进行分配,您必须向 TypeScript 保证您尝试使用的键标识
Generation
.
有几种方法可以做到这一点。
通用提取字符串/数字属性和类型谓词
您可以使用这样的泛型来获取可分配给给定类型的属性的键:
以上仅为部分解决思路介绍,查看全部内容,请添加公众号后回复
001
,即可查看。
该库
使用
AST操作将文本包装并提取到js / ts / jsx / tsx文件
中
,从而使添加I18n变得轻而易举。
a18n简体
中
文|
中
文针对
JavaScript
/
TypeScript
/
React
的自动化I18n解决方案。
该库
使用
AST操作将文本包装并提取到js / ts / jsx / tsx文件
中
,从而使添加I18n变得轻而易举。
功能CLI(用于代码修改):带翻译调用的文本换行(a18n自动换行)注意:“换行”仅适用于非ascii文本(例如,
中
文,日文等),因此目前不支持英语文本。
欢迎进行讨论,从代码
中
提取文本(从翻译呼叫
中
提取)(a18n提取)
1. 类组件
类组件的定义形式有两种:
React
.Component<P, S={}> 和
React
.PureComponent<P, S={} SS={}>,它们都是泛型接口,接收两个参数,第一个是props类型的定义,第二个是state类型的定义,这两个参数都不是必须的,没有时可以省略:
interface IProps {
name: st
原始类型:number/string/boolean/null/
undefined
和 ES6 新增的 symbol
对象
类型:object(包括,数组、
对象
、函数等
对象
)
2.TS 新增类型
联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any 等
原始类型在 TS 和 JS
中
写法一致;
对象
类型在 TS
中
更加细化,每个具体的
对象
(比如,数组、
对象
、函数)都有
在我用
react
+
typescript
写项目的时候,ts总会报一些类型的错误,比如下图的错误:
Type
‘string | string[]’ is not
assign
able
to
type
‘string |
undefined
’.
在我确定我的类型是正确的情况下不理解为啥报这样一个错,在网上找了很久,就是加类型断言,解决方法如下图:(值 as 类型)
这样就不会报错拉。
关于
typescript
类型断言,整理知识点如下:
typescript
很强大,但是用不好时也会很头痛,开发遇到类型错误的
import
React
from '
react
';
import
React
DOM from '
react
-dom';
import { Barrage, BarrageItemProps } from '
react
-barrage';
接着,您可以
使用
Barrage 组件来渲染弹幕。Barrage 组件需要一个 BarrageItemProps 类型的数组作为 props,每个 BarrageItemProps
对象
描述一个弹幕的内容和样式。例如:
```
typescript
const barrageItems: BarrageItemProps[] = [
content: 'Hello world!',
style: { color: 'white', fontWeight: 'bold' },
speed: 80,
duration: 5000,
content: 'Welcome to
react
-barrage!',
style: { color: 'red' },
speed: 100,
duration: 7000,
React
DOM.render(
<Barrage items={barrageItems} />,
document.getElementById('root')
这将在页面上渲染一个带有两个弹幕的 Barrage 组件。您可以根据需要定义更多的 BarrageItemProps
对象
来添加更多的弹幕。