TypeScript JSX

介绍

在线的免费的代码转换器工具:可以把HTML 代码移植到 JSX 语法。还支持很多其他的转换。

JSX 是 ECMAScript 的一种类似 XML 的语法扩展,没有任何定义的语义。它不打算由引擎或浏览器实现。它并不是将 JSX 纳入 ECMAScript 规范本身的提议。它旨在供各种预处理器(转译器)使用这些标记转换为标准 ECMAScript。

JSX 是一种在 JavaScript 中编写类似 XML 结构来描述用户界面的语法。

TypeScript支持内嵌,类型检查以及将JSX直接编译为JavaScript。

基本用法

想要使用JSX必须做两件事:

  1. 给文件一个.tsx扩展名:
    • 向开发工具和编译器表明该文件中可能包含 JSX 语法。
  2. 启用jsx选项
    • 启用 jsx 选项通常是在 tsconfig.json 文件中进行配置。

TypeScript具有三种JSX模式:

  • preserve:保留 JSX 为原始的样子,不进行转换。
    • 保留 JSX 为原始的样子,不进行转换。
    • 输出文件会带有.jsx扩展名。
  • react:这是在使用 React 框架时常用的选项,会对 JSX 进行相应的转换。
    • 生成React.createElement ,在使用前不需要再进行转换操作。
    • 输出文件的扩展名为.js
  • react-native:用于 React Native 开发。
    • 保留 JSX 为原始的样子,不进行转换。
    • 输出文件的扩展名为.js
模式 输入 输出 输出文件扩展名
preserve <div /> <div /> .jsx
react <div /> React.createElement("div") .jx
react-native <div /> <div /> .jx

这些模式只在代码生成阶段起作用,类型检查并不受影响。

注意:React标识符是写死的硬编码,所以你必须保证React(大写的R)是可用的。

以下是一个简单的 tsconfig.json 配置示例,启用了 jsx 选项为 react

{
   
  "compilerOptions": {
   
    "jsx": "react"
  }
}

在具有 .tsx 扩展名的文件中,就可以自由地使用 JSX 语法进行开发了。

JSX 中的属性设置与 HTML 类似,但需要使用驼峰命名法。比如在 HTML 中是 class 属性,在 JSX 中则是 className

const element = <div className="my-class">Content</div>;

可以通过使用引号"",来将属性值指定为字符串字面量:

const element = <div className="my-class" title="This is a title">Content</div>;

className 的值 my-classtitle 的值 This is a title 都是字符串字面量。
这种方式适用于属性值明确为固定字符串的情况。

如果属性值是动态计算的结果或者是变量,使用{}直接将变量或表达式嵌入到 JSX 中:

const titleText = 'Dynamic Title';
const element = <div className="my-class" title={
   titleText}>Content</div>;

JSX 允许在模板中插入数组,数组会自动展开所有成员:

let arr = [
  <p>111</p>,
  <p>222</p>,
];
const content = (
  <div>{
   arr}</div>
);

JSX 支持条件渲染和循环渲染。
条件渲染:

const isLoggedIn = true;
const element = (
  <div>
    {
   isLoggedIn? <p>Welcome back!</p> : <p>Please log in.</p>}
  </div>
);

循环渲染:

const items = ['Apple', 'Banana', 'Orange'];
const element = (
  <ul>
    {
   items.map(item => <li>{
   item}</li>)}
  </ul>
);

JSX 的注释代码需要写在花括号 {} 中:

const content = (
  {
   /*注释...*/}
  <h1>hello world</h1>
);

as操作符

在 TypeScript 的 JSX 中,as 操作符通常用于类型断言。

TypeScript也使用尖括号<>来表示类型断言:

let foo = <foo>bar;

这句代码断言bar变量是foo类型的。

TypeScript在.tsx文件里禁用了使用尖括号<>的类型断言。
因为在 TypeScript 的 JSX 环境中(例如 .tsx 文件),尖括号<>有特殊用途。

使用 as 操作符:

let foo = bar as foo;

JSX 环境中使用 as 操作符:

interface CustomButtonProps {
   
  label: string;
  onClick: () => void;
}
const button = (
  <button
    as={
   CustomButton}
    label="Click Me"
    onClick={
   () => console.log('Clicked!')}
  />
);

as操作符在.ts.tsx里都可用,并且与尖括号类型断言行为是等价的。

类型检查

TypeScript 对 JSX 的类型检查涵盖了元素类型属性类型子元素类型以及基于值的元素类型等多个方面,通过严格的类型检查可以在开发过程中及早发现类型不匹配的问题,提高代码的质量和可维护性。

元素类型检查

元素类型检查分为固有元素、和自定义组件。

固有元素(内置的 HTML 元素)

在 TypeScript 中对 JSX 固有元素(即内置的 HTML 元素)的检查主要包括以下几个方面:

  1. TypeScript 会检查使用的固有元素名称是否正确。
    • 必须使用正确的 HTML 元素名称,如 <div><p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值