TyprScript 注意的地方

2019-05-08  本文已影响0人  耄_9e33

静态类型检查

: string/number/boolean/null/undefined

需要注意 不可以用 new 的方式,会编译报错,但可以通过直接运行构造函数的方式

let createdByNewBoolean:Boolean = new Boolean(1);  // 报错
let createdByBoolean:Boolean = Boolean(1);  // 编译通过

空值 void

没有什么卵用,只能被复制 undefined 或 null

let empty: void = null;
function alertName():void{ 
     alert('My name is Tom');
}

需要注意 undefined 和 null 类型的值可以赋给任意类型的变量,但void 类型的不能赋值给其他类型变量

any

相当于没写声明,用any 还用ts干嘛,哼

let something;  // 相当于 let something: any;

注意如果赋初始值了是会按初始值做类型推断的,如下

let count = 123;  // 相当于 let count: number = 123;

联合类型

通过用 | 可以将变量声明为多个类型
需要注意的是调用此变量的方法的时候只能调用多个类型都有的方法或属性

function getString(something: string | number): string {
    return something.length;  // 报错
    return something.toString();  // ok
}

未赋初始值得变量会被类型推断

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 编译时报错

interface: 对象的形状

对象的形状,即声明某些类型对象的规则,对象的形状

interface Person{
  readonly id?: number;  // ? 表示可选,readonly 表示不可修改且只有对象一开始才能赋值
  age: number;
  name: string;
  [other: number]: number | string;  // 允许对象创建时增加其他属性,如果不加这行创建对象则只能严格按照interface 创建
  [other: number | string]: number | string;  // 会报错,索引声明不能用联合类型
  // An index signature parameter type must be 'string' or 'number'.
  // [other: number | string]: number | string;
}
let perter: Person = {
  age: 16,
  name: 'perter',
  1: 'male'
}
perter.id = 123;  // 会报错

数组的类型

类型 + []

let arr: number[] = [1,2,3, '11']  // 会报错,因为 值得类型不是number[] ,而是 (number | string)[]

arr.push('3') // 同样会报错

数组泛型

let arr: Array<number> ;

interface表示数组

interface arr{
  [key: number]: string;
}
let stringArr: arr = ['1', '2', '8'];
上一篇 下一篇

猜你喜欢

热点阅读