学习笔记之TypeScript语法一

js原有数据类型在ts中的应用

let isDone: boolean = false;
let decLiteral: number = 6;
let myName: string = 'Tom';
let u: undefined = undefined;
let n: null = null;

undefined类型的变量只能被赋值为undefined,null只能被赋值为null

如果是一个普通类型,在赋值过程中改变类型是不被允许的,因此如果需要改变类型就需要用到any

et myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;

在任意值上访问任何属性都是允许的,也允许调用任何方法

let anyThing: any = 'hello';
console.log(anyThing.myName);

变量如果在声明的时候,未指定其类型,那么它就会被识别为任意值类型

ts存在类型推论,就是说在定义变量的时候,虽然没有指定变量的类型,但是定义了变量的具体值,就根据这个值来推断这个变量的类型,也就不可以再改变这个变量的类型了。同时支持联合类型,就是说取值可以是多种类型的一种,比如

let myFavoriteNumber: string | number;

当ts不确定一个联合类型具体是哪个类型的时候,我们就只能访问此联合类型的所有类型里共有的属性或方法

function getLength(something: string | number): number {
return something.length;
}
//length 不是 string 和 number 的共有属性,所以会报错。

- 接口

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

变量Tom的形状必须跟接口Person完全一致,属性也是不能多不能少,if你有不一致需求的时候

interface Person {
name: string;
age?: number; //允许这个变量没有
}
let tom: Person = {
name: 'Tom'
};

这时仍然不允许添加未定义的属性,如果需要任意属性,使用[propName: string]就可以定义任意属性来取string类型的值。一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子级

interface Person {
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
name: 'Tom',
age: 25, //这个就要超出错,因为这个可以没有,但是如果有了就属于任意属性里面的,就只能是string
gender: 'male'  //任意属性名
};
// 只读属性 readonly id: number;  只可以获取不可以更改值,当然第一次赋值还是可以赋值的
原文地址:https://www.cnblogs.com/fdd-111/p/11840080.html