// ? var let const js语法规则
/*
var:
1、没有作用域块,声明在全局作用域是全局变量,声明在函数内部就是局部变量
2、有变量提升
let:
1、有作用域块
2、没有变量提升
3、已经声明的变量 不可再次声明
const:
1、有作用域块
2、没有变量提升
3、一旦声明切不可改变
4、已经声明的变量 不可再次声明
*/
// {
// var num1:number = 10
// }
// console.log('num1 :>> ', num1); //10
// {
// let num2:number = 20
// }
// console.log('num2 :>> ', num2); //报错 找不到num2 存在作用域块
/************************************************************************** */
// console.log('num3 :>> ', num3); 报错 找不到num3 没有变量提升
// let num3:number = 10
// console.log('num4 :>> ', num4);
// var num4:number = 20
/************************************************************************** */
// let c = 1
// let c = 2
//! 接口 对定义好的结构,进行类型检查
// 在使用接口定义对象的时候,以声明的属性不能少,会报错
// 如果需要可选属性,可在该属性后加?
// 只读属性,在属性前 加 readonly;一但初始化,不可更改
//? 注意 做为变量使用的话用 const,若做为属性则使用readonly
// interface labelValue {
// label: string
// value: number
// test?: any
// }
// function fn (o:labelValue) {
// console.log('label :>> ', o.label);
// }
// let myObj:labelValue = {
// label: 'hello',
// value: 1
// }
// fn(myObj)
/*********************************************************************************** */
// interface SquareConfig {
// color?: string;
// width?: number;
// }
// function createSquare(config: SquareConfig) {
// // ...
// }
// let mySquare = createSquare({ colour: "red", width: 100 }); //代码直接报错,自动纠错 很不错的功能
/*********************************************************************************** */
// interface SquareConfig {
// color?: string;
// width?: number;
// [propName: string]: any;
// }
// const o:SquareConfig = {
// length:1
// }
//? 函数类型
// interface testType {
// (a:number,b:string):number
// }
// let test:testType = function (a,b){
// return a+Number(b)
// }
//? 可索引类型
interface strArray {
[index:number]:string
}
let arr1:strArray = ['a', '1']