let num : number = 10
num = 100
console.log( num );
let str:string ='str'
str = '这是一个字符串'
console.log( str );
let istrue : Boolean = true
istrue = false
console.log( istrue );
// 这是一个 undfind
let und:undefined
und = null
console.log( 'undefined类型输出',und );
let nu:null
nu = undefined
console.log( 'null进行输出',nu );
方式一: 对象object
let obj: {}
obj = { a:1 , b:4 , c:6 }
方式二: 对象object
let obj1 : { name:string, age?:number }
obj1 = { name:"zhangsan" }
方式三:对象object ( 可传入多个对象 )
let obj2 : { name:"里斯",[ propName:string ]:any }
obj2 = { name:"里斯",age:"里斯",c:4 }
元组:数组长度是固定的
let yz : [ string,string ]
yz = ["1","2"]
列出所有可能的情况
enum gender{
grils = 0,
male = 1
}
let i : { name:string,sex:gender,a?:number,[ propName:string ] : any }
i = {
name:"张三",
age:44,
sex:gender.male
}
console.log( i.sex === gender.male ); // true
函数 的 类型
let d : ( a:number,b:number )=> number
d = function ( n1:number=1,n2:number=2 ){
return n1 + n2
}
console.log( d( 10,20 ) );
void
函数的返回为空
function fn() : void {
return null
}
never
函数没有返回值
function noReturn():never {
throw new Error("这是一个错误")
}
let notype: number | string
notype = 1
notype = 'str'
let objs : { name:string } & { age : number }
objs = {
name:"sas",
age:45
}
console.log( objs );
let mytype = 11 || 22 || 33
let variable = mytype
console.log( variable );
let a = '字符串 a'
let b = '字符串 b'
a = b as string
class Anamin {
name:string;
age:number;
constructor(name:string,age:number){
this.name = name
this.age = age
}
say(){
console.log( "这是一个动物类" );
}
static staticMeth(){
console.log( "这是一个静态方法" );
}
}
class Dog extends Anamin {
// say 对父类中的 方法进行了重写
say(){
console.log( "汪汪汪" );
}
}
class Cat extends Anamin {
// say 对父类中的 方法进行了重写
say(){
console.log( "猫猫猫" );
}
}
let dog1 = new Dog("王婉",15)
console.log( dog1.say() ); // 汪汪汪
/* 被 static 修饰的方法为 静态方法,静态方法只能被 类 访问 */
console.log( Anamin.staticMeth() ); // 这是一个静态方法
let cat = new Cat("猫",55)
console.log( cat.say() ); // 猫猫猫
super 指向父类中的属性
abstract class Anamins {
name:string;
constructor(name:string){
this.name = name
}
say(){
console.log( "这是一个动物类" );
}
}
class Dogs extends Anamins {
age:number;
constructor( name:string,age ){
super(name)
this.age = age
}
say(){
console.log( "汪汪汪" );
}
}
let dog0 = new Dogs("王婉",15)
console.log( dog0.age );
被 abstract 修饰的类 为抽象类,被其修饰的方法 为 抽象方法 修饰的属性为抽象属性
抽象方法被继承时 必须 被重写
abstract class Pseson {
name:string;
constructor(name:string){
this.name = name
}
abstract say():void;
}
class Son extends Pseson {
age:number;
constructor( name:string,age ){
super(name)
this.age = age
}
say(){
console.log( "这是继承抽象类的" );
}
}
let dog0 = new Son("王婉",15)
console.log( dog0.age );
接口可以通过 implements 被类 进行一个实现
他的主要作用是对类的接口进行一个限制,也就是用来定义类的结构,告诉类应该包含哪些结构 同时接口 可以当作类型申明 去使用
当做 类型申明使用
interface myInterface {
name: string,
age: number
}
const obj : myInterface = { // myInterface
name:"占山",
age:15
}
console.log( obj );
实现接口
interface myinter {
name:string;
sayHello():void
}
// 定义类时 可以去实现接口
// 实现接口 就是 类 满足 接口的要求
class Myclasss implements myinter{
name: string
sayHello(): void {
throw new Error("Method not implemented.")
}
}
借助我们的方法 实现间接的修改我们的属性
class Person(){
private _name:string;
private _age:number;
constructor( name:string,age:number ){
this._age = age
this._name = name
}
getName(){
return this._name
}
setName(val:string){
this._name = val
}
}
// 实例化
let per = new newClass("孙悟空",15)
console.log( per.getName() )
console.log( per.setName('猪八戒') )
通过存储器访问属性
class newClass {
private _name:string;
private _age:number;
constructor(name:string,age:number) {
this._name = name
this._age = age
}
// get set 属性的 存取器
get name(){
return this._name
}
set name(val:string){
this._name = val
}
get age(){
return this._age
}
set age(val:number){
if( val > 0 ){
this._age = val
}
}
}
let per = new newClass("孙悟空",15)
// 通过存储器访问属性
console.log( per.name );
console.log( per.name = '猪八戒' );
console.log( per );