TypeScript (二)基础

原始数据类型

let isDone: boolean = false;         //布尔值
let decLiteral: number = 6;         // 数值
let myName: string = 'Tom';      //字符串
let unusable: void = undefined;   //void 类型的变量只能将它赋值为 undefined 和 null
let u: undefined = undefined;     //undefined
let n: null = null;                        //null

任意值

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
// error: Type 'number' is not assignable to type 'string'.
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;          //true

类型推论

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
//error: Type 'number' is not assignable to type 'string'.

事实上,它等价于:

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
//error: Type 'number' is not assignable to type 'string'.

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:

let myFavoriteNumber;
myFavoriteNumber = 'seven';              //true
myFavoriteNumber = 7;                    //true

联合类型

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型

对象的类型——接口

interface Person {
    name: string;
    age: number;
}

let tom: Person = {
    name: 'Tom',
    age: 25
};

上面的例子中,我们定义了一个接口 Person,接着定义了一个变量 tom,它的类型是 Person。这样,我们就约束了 tom 的形状必须和接口 Person 一致。

interface Person {
    name: string;
    age: number;
}

let tom: Person = {               //error,少一些属性是不允许的
    name: 'Tom'
};
let tom: Person = {              //error,多一些属性是不允许的
    name: 'Tom',
    age: 25,
    gender: 'male'
};

可选属性:

interface Person {
    name: string;
    age?: number;             //可选属性
}

let tom: Person = {
    name: 'Tom'
};

任意属性:

interface Person {
    name: string;
    age?: number;
    [propName: string]: any;              //任意属性
}

let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

interface Person {
    name: string;
    age?: number;
    [propName: string]: string;
}

let tom: Person = {
    name: 'Tom',
    age: 25,
    gender: 'male'
};
//error: Property 'age' of type 'number' is not assignable to string

上例中,任意属性的值允许是 string,但是可选属性 age 的值却是 number,number 不是 string 的子属性,所以报错了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值