1.安裝與編譯
npm install -g typescript
tsc helloworld.ts
2.數(shù)據(jù)類型
注:ts中定義變量必須指定類型尖奔,若不是any類型对省,后續(xù)重新賦值時改變類型則會報錯
var flag:boolean=true
var num:number=1
var str:string="123"
// 數(shù)組定義的幾種方式
var arr:number[]=[1,2,3] // 數(shù)組中的元素都為數(shù)字類型
var arr:Array<number>=[1,2,3] // 數(shù)組中的元素都為數(shù)字類型
var arr:[number,string]=[1,"1"] // 為數(shù)組中指定位置的元素指定類型
var arr:any=[1,"1",false] // 數(shù)組中元素為任意類型
枚舉類型(enum)
enum Err {'undefined'=-1,null=-2,success=1}
var e:Err=Err.success
console.log(e) // 1
任意類型
var a:any=1
a="1" // 當指定為任意類型時,后續(xù)可賦值為任意類型
undefined和null
var a:undefined // 定義未賦值時 可定義為undefined
var a:number | undefined | null // 定義為數(shù)字或undefined或null
var a:null
a=null // 定義為空時,賦值null
void類型
// 方法沒有返回值
function a():void{
console.log("a")
}
函數(shù)
// 指定參數(shù)類型和返回值類型
functin info(name:string, age:number):string {
return "字符串"
}
// 沒有返回值的方法
functin info():void {
console.log('沒有return')
}
// 可選參數(shù)
functin info(name:string, age?:number):string { // age可傳可不傳,可選參數(shù)必須放在后面
return "字符串"
}
// 默認參數(shù)
functin info(name:string, age:number=20):string { // age不傳時默認為20
return "字符串"
}
類和繼承
1.類的實現(xiàn)
class Person{
public name: string
constructor (n:string) {
this.name = n
}
run():viod {
cosnole.log("run")
}
}
//等價于
function Person(name) {
this.name = name
this.run = function() {
cosnole.log("run")
}
}
2.繼承 (extends杨帽、super)// 子類和父類有相同方法時 調(diào)用子類方法
class Web extends Person {
constructor (name:string) {
super(name)
}
}
var w=new Web('張三')
w.run()
3.類的修飾符
public:公有類型 在類、子類嗤军、類外面都可以訪問
protected:保護類型 在類注盈、子類可以訪問
private:私有類型 只能在子類使用
4.實例方法和靜態(tài)方法
class Person{
public name: string
static age=20
constructor (n:string) {
this.name = n
}
run1():viod { // 實例方法
cosnole.log("run1")
}
static run2():viod { // 靜態(tài)方法
cosnole.log("run2"+Person.age ) // 靜態(tài)方法中調(diào)用靜態(tài)屬性
}
}
var a=new Person('aa')
a.run1() // 實例方法調(diào)用
Person.run2() // 靜態(tài)方法調(diào)用
4.抽象方法
abstract class Person{
public name: string
static age=20
constructor (n:string) {
this.name = n;
}
run1():viod { // 實例方法
cosnole.log("run1")
}
abstract run2():any; // 抽象方法必須放在抽象類中,且在繼承類中具體實現(xiàn)
}
5.1函數(shù)類型接口
// 傳入?yún)?shù)類型和返回類型必須與定義類型一致
interface encrypt{ // 定義函數(shù)接口
(key:string,value:string):String
}
var md5:encrypt = function(key:string,value:string):string{
return key+value
}
5.2索引類型接口
// 傳入?yún)?shù)類型和返回類型必須與定義類型一致
interace userArr = {
[index:number]:string
}
var arr:userArr=['aaa','bbb']
5.3類類型接口
// 定義類實現(xiàn)接口類型
interface Animal {
name: string;
eat(str:string):void
}
class Dog implements Animal{ //dog類實現(xiàn)Animal接口
name:string;
constructor(name:string){
this.name=name
}
eat(){
console.log(this.name)
}
}
6.接口繼承
interface Animal { // 定義類接口
eat():viod;
}
interface Person extends Animal { // 接口Person繼承Animal
work():viod;
}
class web implements Person{ //dog類實現(xiàn)Person接口和Animal接口
name:string;
constructor(name:string){
this.name=name
}
eat(){
console.log(this.name)
}
work(){
console.log(this.name)
}
}
7.泛型
7.1 范型類
class Minclas<T> {
public list:T[] = [];
add(value:T):void{
this.list.push(value)
}
min():T{
var min = this.list[0];
for(var i=0; i< this.list.length;i++){
if(min > this.list[i]){
min = this.list[i]
}
}
return min
}
}
var m = new Minclas<number>() // 實例化類叙赚,并指定T的類型是number
7.2 范型接口
interface configFn{
<T>(value:T):T;
}
var getData:configFn=function<T>(value:T):T{
return value;
}
getData<string>('aaa') // 實例化接口老客,并指定傳入?yún)?shù)類型是字符串