TypeScript 基础
typescript教程 https://wangdoc.com/typescript/any
TypeScript.xmind **定义任何东西的时候要注明类型,调用任何东西的时候要检查类型。
a 标签HTMLAnchorElement TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。1个项目学会TypeScript核心基础语法_哔哩哔哩_bilibili
快速入门
浏览器是识别不了typescript的需要先写好,在编译成js 安装编译typescript器
javascript
npm install typescript
编译器初始化
javascript
tsc --init
编译
javascript
tsc 编译
tsc -w 自动编译
基础
定义任何东西都要注明类型,调用任何东西都要检查类型 创建变量时 要指定 变量类型类型名首字母小写
typescript
let name:string = 'jiang'
any 类型
unknown 类型
它与any含义相同,表示类型不确定,可能是任意类型,但是它的使用有一些限制,不像any那样自由,可以视为严格版的any。 unknown类型的变量,不能直接赋值给其他类型的变量
dotnetcli
let v:unknown = 123;
let v1:boolean = v; // 报错
let v2:number = v; // 报错
不能直接调用unknown类型变量的方法和属性。
dotnetcli
let v1:unknown = { foo: 123 };
v1.foo // 报错
let v2:unknown = 'hello';
v2.trim() // 报错
let v3:unknown = (n = 0) => n + 1;
v3() // 报错
never 类型
“空类型”即该类型为空,不包含任何值。
联合类型
指的是多个类型组成的一个新类型,使用符号|表示
dotnetcli
let x:string|number;
x = 123; // 正确
x = 'abc'; // 正确
交叉类型
指的多个类型组成的一个新类型,使用符号&表示
type 命令
type命令用来定义一个类型的别名。
dotnetcli
type Age = number;
let age:Age = 55;
断言
as + 变量类型
联合
| 联合两个类型
定义类
javascript
class Cat {
id:string;
url:string;
height:number;
width:number;
constructor (id:string,url:string,height:number,width:number){
this.id = id
this.url = url
this.height = height
this.width = width
}
}
interface 接口
在接口里定义好属性名和属性值类型 在创建对象时多个对象就可以复用 关键字implements 实现接口
typescript
interface CatType{
id:string;
url:string;
height:number;
width:number;
}
class Cat implements CatType{
id: string;
url: string;
height: number;
width: number;
constructor (id:string,url:string,height:number,width:number){
this.id = id
this.url = url
this.height = height
this.width = width
}
}
思路有数据时就创建一个tr标签 并且为tr 标签里添加多个td
typescript
// 增删页面数据
class WebDisplay{
static addData(data){
const cat = new Cat (data.id,data.url,data.hight,data.width);
const tableRow:HTMLTableRowElement = document.querySelector('tr')
tableRow.innerHTML = `
<td>${cat.id}</td>
<td><img src="${cat.url}"></td>
<td>${cat.height}</td>
<td>${cat.width}</td>
<td>${cat.url}</td>
<td><a href="#">X</a></td>
`;
tableBody.appendChild(tableRow)
}
}
- public 允许在任何地方访问
- 定义数据类型 data:CatType
- 定义返回值 类型 :void
- 给数子类型转换.toSring
泛型
- 泛型是指定义函数、类、接口等时不指定具体类型,而是通过参数传递类型,让代码更加通用。
- 泛型使用**尖括号<>**来声明,并且可以定义多个泛型参数。
占位符
- 占位符是指在定义类型时使用一个特殊的标识符,表示该位置可以任意类型。
- 占位符 一般用T标识
typescript
// 接收数据
async function getJSON<T>(url:string):Promise<T> {
const response:Response = await fetch(url)
const json:Promise<T> =await response.json()
return json
}
- 这里我们都知道 json 变量返回的是一个promise, 只不过我们并不知道返回的promise里具体是什么内容, 因此我们可以用泛型来表示
- 首先我们在函数名字后面加上尖括号和占位符的名称
- 接着就可以声明json变量的类型为promise,
- 后面接上监括号, 尖括号里面就写上占位符的名称,
- 这里表示我们知道返回promise, 只不过我们先不着急定义promise返回内容里的类型而已
- 最后我们return了这个jason变量出去, 因此我们还要为, 定义函数返回的内容类型 其实就是和这个json定义的类型一样了
在 JavaScript 中,try...catch语句用于捕获和处理异常。它的语法如下:
javascript
try {
// 可能会出现异常的代码
} catch (error) {
// 处理异常的代码
}
javascript
async function getData() {
try {
const json:CatType[] = await getJSON<CatType[]>(url)
const data = json[0]
WebDisplay.addData(data)
} catch (error) {
console.log(error);
}
}
- 在getJSON 中明确占位符内容 在尖括号里明确promise里返回什么内容
- 因为是返回一个数组, 数组里面有个对象, 这个对象的类型我们前面已经定义好了接口, 也就是CatType, 因此我们可以直接CatType数组来写,
- 写完以后还可以给json变量声明一下类型,
数组类型声明
- 如果数组里是一个对象, 那一般把这个对象的类型写在一个接口interface里, 再进行声明会更方便些