//TypeScript-基本数据类型和报错解析
//基本数据类型
//let num = 25;
/* let flo = 25.5;
let hex = 0xf000;
let binary = 0b1001;
let octal = 0o733; */
//重新赋值
//num = '25';//不能存储非原有数据类型的数据
//ts 原型
//let num:number = 25; //等同于 let num = 25;
//booleab
//let islogin = false;
let islogin:boolean = false;
islogin = true;
//string
let str:string = "hello world";
str = "12";
let anything;//这样做是可以的 等同于 let anything:any
anything = 25;
anything = "hello";
//数组 元组 枚举
//数据
let names:Array<string> = ["shaozhu","douddouy","chixing"];
console.log(names);
//names[0] = 100;//不能这样写
names[0] = "hhee";//这样写可以
let numbers:number[] = [1,2];//也可以这样写 数字数组
let anyarray :any[] = [1,true,"11"];//这样什么数据都可以写
//元组
let colors:[string,number] = ["try",99];//这个是按照顺序的 不能换顺序
//枚举 enum
enum Color{
Black = 100,
Yellow,
Red,
Blue
}
let myColor:Color = Color.Red;
console.log(myColor);//值是 从0开始的
//TypeScript-函数类型
//函数的相关类型
//必须返回字符串 函数返回值的类型
function returnvalue():string{
return "hello";
}
console.log(returnvalue());
//没有任何返回值
function sayhello():void{
console.log("hello !@");
}
//参数类型 指定传的参数
function sumvalue(value1:number,value2:number):number{
return value1+value2;
}
console.log(sumvalue(10,6));
//函数类型
let myfunc:(a:number,b:number)=>number;// 声明传的参数和返回的类型
myfunc = sumvalue;
//myfunc(10,20);
console.log(myfunc(10,20));
//TypeScript-对象类型和type
let dataobj:{name:string,age:number} = {
name:"shaozhu",
age:31
}
dataobj = {
name:"1222",
age:25
};
//复杂的对象类型
let complex:{data:number[],myfunc:(item:number)=>number} = {
data:[12,23,364,6564],
myfunc:function(item:number):number{
return item+1;
}
}
//type 生成类型 可以复用
type Mytype = {data:number[],myfunc:(item:number)=>number}
let complex2:Mytype = {
data:[12,23,364,6564],
myfunc:function(item:number):number{
return item+1;
}
}
//TypeScript-never和null类型
//uni type 检查类型 null undefined never
let uniintype:number|string|boolean = 12;
uniintype = "12";
uniintype = false;
//检查类型
let checktype = 10;
if(typeof checktype == "number"){
console.log("1");
}
//null 和 undefined
let mynull = null;
mynull = undefined;
//never 类型 任何类型的子类型
//never never类型是任何类型的子类型 也可以赋值给任何类型 然后 没有类型是
//never 的类型或者可以赋值给never
//另外 (处理never 本身之外) 即使any和不可以赋值给never
//通常表现为抛出异常或无法执行到终止点 (例如无限循环)
let x:never;
//x = 123;
//不能将其它类型转换为 never 类型
///never 使用场景 抛出异常
function error(message:string):never{
throw new Error(message);
}
//死循环
function loop():never{
while(true){
}
}
//异常也是 never
let y:number;
y = (()=>{
throw new Error("message");
})()
//TypeScript-类型练习
type sunmvalue = {money:number,count:(val:number)=>void}
let sumvalue:sunmvalue = {
money:200,
count:function(value:number):void{
this.money += value;
}
}
let handleCount:{name:string,symvalue:sunmvalue,friends:string[]} = {
name:"henry",
symvalue:sumvalue,
friends:["bucky","elyse","hhe"]
};
handleCount.symvalue.count(500);
console.log(handleCount);
//TypeScript-类(属性和方法)
//public 公开的
//private 私有的
//protected 被保护的
class Person{
public name:string;
protected gender:string;
private age:number=27;
constructor(name:string,public username:string,gender:string){
this.name = name;
this.username = username;
this.gender = gender;
};
printAge(age:number){
console.log(this.age);
this.age = age;
};
setGender(gender:string){
this.gender =gender;
console.log(this.gender);
}
}
const person = new Person("shaozhu","hhhe","122");
console.log(person.name);
console.log(person.username);
person.printAge(30);
person.setGender("女")
//TypeScript-类(属性和方法)
//public 公开的
//private 私有的
//protected 被保护的
class Person{
public name:string;
protected gender:string;
private age:number=27;
constructor(name:string,public username:string,gender:string){
this.name = name;
this.username = username;
this.gender = gender;
};
printAge(age:number){
//console.log(this.age);
this.age = age;
};
setGender(gender:string){
this.gender =gender;
//console.log(this.gender);
}
}
const person = new Person("shaozhu","hhhe","122");
//console.log(person.name);
//console.log(person.username);
person.printAge(30);
person.setGender("女")
//TypeScript-类的继承
//接着上面的代码写
class Student extends Person{
public ssid:number=1124;
constructor(name:string,username:string,gender:string,ssid:number){//
super(name,username,gender);
this.ssid = ssid;//让父类的东西可以在子类看到
//console.log(this.gender);//yes
//console.log(this.age);//no
this.setGender("女");
}
}
const misterxie = new Student("xiexie","xiexie1","xiexie2",1024);
console.log(misterxie.name,misterxie);
misterxie.printAge(22);
//TypeScript-set和get和static
//1.class set get 修饰词 用于隔离私有属性 和可公开属性
//2. class 静态属性和方法
class Person{
private _name:string = "shaozhu";
static PI:number=3.14;//静态属性
static callccirle(value:number):number{
return this.PI*value;
};
//私有属性赋值
set setname(value:string){
this._name=value;
}
//私有属性取值
get getname(){
return this._name;
}
}
/* let person = new Person();
console.log(person.getname)
person.setname = "xiexie"
console.log(person.getname)
console.log(person.PI)// 静态的不能这样取 */
console.log(Person.PI)
console.log(Person.callccirle(8));
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
namespace MyNath{
export const PI = 3.14;
export function sumvalue(num1:number,num2:number):number{
return num2+num1;
}
export function calcacirle(value:number):number{
return value*PI;
}
}
const PI = 2.88;
console.log(MyNath.sumvalue(5,10));
console.log(PI);
console.log(MyNath.PI);
//TypeScript-命名空间文件拆分 !!!!!
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
//sumvalue.ts
namespace MyNath{
export function sumvalue(num1:number,num2:number):number{
return num2+num1;
}
}
//TypeScript-命名空间文件拆分
//-------------------------------------------------
//calcacirle.ts
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
//TypeScript-命名空间文件拆分
namespace MyNath{
const PI = 3.14;
export function calcacirle(value:number):number{
return value*PI;
}
}
//-------------------------------------------------
app.ts
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
console.log(MyNath.sumvalue(5,10));
console.log(MyNath.calcacirle(8));
//TypeScript-命名空间文件拆分
//编译命名空间
//tsc --outfile app.js sumvalue.ts calcacirle.ts app.ts
//多个文件合并
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
/// <reference path="calcacirle.ts" />
/// <reference path="sumvalue.ts" />
console.log(MyNath.sumvalue(5,10));
console.log(MyNath.calcacirle(8));
console.log(MyNath.shaozhu.shaozhuwl(100,10));
//TypeScript-命名空间文件拆分
//编译命名空间
//tsc --outfile app.js sumvalue.ts calcacirle.ts app.ts
//多重命名空间 引入后编译 F是大写
///tsc app.ts --outFile app.js
//--------------------上面这个是app.ts----------------------
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
namespace MyNath{
export function sumvalue(num1:number,num2:number):number{
return num2+num1;
}
//多重命名空间
export namespace shaozhu{
export function shaozhuwl(value1:number,vaule2:number):number{
return value1-vaule2;
}
}
}
//TypeScript-命名空间文件拆分
//--------------------上面这个是sumvalue.ts----------------------
//TypeScript-初识命名空间namespace
//命令空间 namespace
//export 声明允许访问
//TypeScript-命名空间文件拆分
namespace MyNath{
const PI = 3.14;
export function calcacirle(value:number):number{
return value*PI;
}
}
//--------------------上面这个是calcacirle.ts----------------------
//编译命令
//多重命名空间 引入后编译 F是大写
///tsc app.ts --outFile app.js
//模块化引入 重点哦!!
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>TS第一课</title>
<script src="https://cdn.bootcss.com/systemjs/0.20.15/system.js"></script>
</head>
<body>
<!-- <script src="./app.js"></script> -->
<script>
System.config({
baseUrl:"/",
packages:{
"/":{
defayltExtension:"js",
}
}
});
System.import("app.js");
</script>
</body>
</html>
---------------上面的是html-------------------
//TypeScript-模块module的使用 模块么么哒
//import {PI,calcacirle} from "./stuff/calcacirle";
import * as circl from "./stuff/calcacirle";
import {sumvalue,shaozhuwl} from "./stuff/sumvalue"
console.log(circl.PI);
console.log(circl.calcacirle(8));
console.log(sumvalue(10,900));
console.log(shaozhuwl(100,90));
//编译 tsc
---------------上面的是app.ts------------------
export const PI = 3.14;
export function calcacirle(value:number):number{
return value*PI;
}
---------------上面的是calcacirle.ts------------------
//export 声明允许访问
//也可以用 export.default
export function sumvalue(num1:number,num2:number):number{
return num2+num1;
}
//多重命名空间
export function shaozhuwl(value1:number,vaule2:number):number{
return value1-vaule2;
}
---------------上面的是sumvalue.ts------------------
//里面用了这个CDN
//<script src="https://cdn.bootcss.com/systemjs/0.20.15/system.js">
//interface接口
//TypeScript-初识interface接口的用法
//interface接口
interface Person{
name:string;
age:number;//:必须要传
sex?:string; // ?: 可以选
readonly salary:number;// readonly 只读 不能修改
[propName:string]:any;//any 任意
greet():void;//无返回值的方法
}
//interface 可以继承 type 不能继承
let person:Person = {
name:"shaizhu",
age:28,
sex:"男",
salary:6000,
ids:[1.,5,45,6,42,6,452,1],
greet(){
console.log("hello shaozhui");
}
}
function ppringPerse(person:Person){
console.log(`我的工资是${person.salary}`)
person.greet();
}
ppringPerse(person);