typscript 文档笔记-基本类型

ts 会有自动类型推导。但不是所有的类型都能推导正确。

Basic Type

  • boolean
  • number: 普通数的表示和各种进制
  • string
  • bigint: 大数
  • array: type[]Array
  • tuple(元祖类型):let a: [type, type, type]。某个变量定义为元祖类型,这个变量就必须跟元祖类型一模一样了
  • enum9(枚举类型)
enum xxx {
 a,
 b = 2, // 这里指定了 b 为 2,那么后面就会从 2 开始递增。前面的 a 仍然是从 0 开始
 c
}
----------------------------------------- 编译过后
var xxx;
(function (xxx) {
    xxx[xxx["a"] = 0] = "a";
    xxx[xxx["b"] = 2] = "b";
    xxx[xxx["c"] = 3] = "c";
})(xxx || (xxx = {}));
// 所以 xxx.a 为 0, xxx[0] 为 a。这很有用
  • unknown:可以是任何类型,ts 不会报错。不过在将其赋值给其他类型的时候、使用某个类型的方法时,需要先判断其为该种类型。
let a:unknown
let b:number
if(typeof a === 'number') {
    b = a
}
if(a === 1) {
    b = a
}
if(typeof a === 'string') a.slice()
  • any:任意类型。对某个变量使用了 any 之后,ts 会放弃对其进行类型检查,也可以赋值给任何类型的变量。对于没有使用 ts 进行类型声明的代码或者第三方库,我们可能会使用到 any。尽量不使用 any,相当对使用 any 的变量放弃了 ts 的类型检查,这违背了 ts 的初衷。
  • void:通常用来指定函数的返回值。未开启 strictNullChecks 时,如果某个变量类型了 void,只有 null 和 undefined 可以赋值给它(前提是 strictNullChecks 未开启)。
  • null、undefined:这两种类型时所有类型的子类型。strictNullChecks 未开启时,它可以赋值给任何类型。strictNullChecks 开启时,两者都可以赋值给 anyundefined 可以赋值给 void
  • never:没有任何其它类型可以赋值给 never。never 代表这个类型的直永远不会发生。如抛出异常、无限循环
let a:never
function error(message: string): never {
  throw new Error(message);
}
a = error('fdsjl') // never 可以赋值给 never
function infiniteLoop(): never {
  while (true) {}
}
  • object

Type Assertions

Sometimes you’ll end up in a situation where you’ll know more about a value than TypeScript does. Usually, this will happen when you know the type of some entity could be more specific than its current type.
type assertions are a way to tell the compiler “trust me, I know what I’m doing.” TypeScript assumes that you, the programmer, have performed any special checks that you need.

类型断言有两种。

  • as 语法
let someValue: unknown = "this is a string";
let strLength: number = (someValue as string).length;
  • 书名号
let someValue: unknown = "this is a string";
let strLength: number = (<string>someValue).length;

你可能感兴趣的:(TypeScript)