Изучение TypeScript (2) --- Базовый Тип

базовый тип

TypeScript поддерживает почти те же типы данных, что и JavaScript, а также предоставляет полезные типы перечисления для нашего удобства.

Логическое значение

Самый простой тип данных — это простое значение true/false, называемое логическим в JavaScript и TypeScript (а также в других языках).

let isDone: boolean = false
isDone = true
// isDone = 2 // error

число

Как и в JavaScript, все числа в TypeScript являются числами с плавающей запятой. Тип этих чисел с плавающей запятой — число. Помимо поддержки десятичных и шестнадцатеричных литералов, TypeScript также поддерживает двоичные и восьмеричные литералы, представленные в ECMAScript 2015.

let a1: number = 10 // 十进制
let a2: number = 0b1010 // 二进制
let a3: number = 0o12 // 八进制
let a4: number = 0xa // 十六进制

нить

Еще одна базовая операция программы JavaScript — обработка текстовых данных на веб-странице или на стороне сервера. Как и в других языках, мы используем строку для представления текстового типа данных. Как и в JavaScript, вы можете использовать двойные (") или одинарные (') кавычки для обозначения строк.

let name: string = 'tom'
name = 'jack'
// name = 12 // error
let age: number = 12
const info = `My name is ${
      
      name}, I am ${
      
      age} years old!`

неопределенный и нулевой

В TypeScript и undefined, и null имеют свои собственные типы, называемые соответственно undefined и null. Сами их типы не очень полезны:

let u: undefined = undefined
let n: null = null

По умолчанию null и undefined являются подтипами всех типов. То есть вы можете присвоить null и undefined переменным типа number.

множество

TypeScript может манипулировать элементами массива, как JavaScript. Существует два способа определения массивов. В первом за [] может следовать тип элемента, указывающий на массив, состоящий из элементов этого типа:

let list1: number[] = [1, 2, 3]

Второй способ — использовать дженерики массива, Array<тип элемента>:

let list2: Array<number> = [1, 2, 3]

Кортеж

Тип кортежа позволяет представить массив с известным количеством и типом элементов, которые не обязательно должны быть одного типа. Например, вы можете определить пару кортежей, значениями которых являются строка и число.

let t1: [string, number]
t1 = ['hello', 10] // OK
t1 = [10, 'hello'] // Error

При обращении к элементу с известным индексом получается правильный тип:

console.log(t1[0].substring(1)) // OK
console.log(t1[1].substring(1)) // Error, 'number' 不存在 'substring' 
方法

перечислить

Тип перечисления является дополнением к стандартным типам данных JavaScript. Используйте тип перечисления, чтобы дать набору значений понятное имя.

enum Color {
    
    
  Red,
  Green,
  Blue
}

// 枚举数值默认从0开始依次递增
// 根据特定的名称得到对应的枚举数值
let myColor: Color = Color.Green // 0
console.log(myColor, Color.Red, Color.Blue)

По умолчанию элементы нумеруются, начиная с 0. Вы также можете вручную указать значение члена. Например, давайте изменим приведенный выше пример, чтобы начать нумерацию с 1:

enum Color {
    
    
  Red = 1,
  Green,
  Blue
}
let c: Color = Color.Green

Или используйте ручное назначение для всех:

enum Color {
    
    
  Red = 1,
  Green = 2,
  Blue = 4
}
let c: Color = Color.Green

Одно из удобств, предоставляемых типами перечисления, заключается в том, что вы можете получить имя перечисления из его значения. Например, мы знаем, что значение равно 2, но не уверены, какое имя оно соответствует в Color, мы можем найти соответствующее имя:

enum Color {
    
    
  Red = 1,
  Green,
  Blue
}
let colorName: string = Color[2]

console.log(colorName) // 'Green'

любой

Иногда мы хотим присвоить тип переменным, тип которых не ясен на этапе программирования. Эти значения могут поступать из динамического содержимого, например, из пользовательского ввода или сторонних библиотек кода. В этом случае мы не хотим, чтобы средство проверки типов проверяло эти значения и позволяло им проходить проверку фазы компиляции напрямую. Затем мы можем использовать любой тип для обозначения этих переменных:

let notSure: any = 4
notSure = 'maybe a string'
notSure = false // 也可以是个 boolean

Тип any полезен при переписывании существующего кода, позволяя вам дополнительно включать или удалять проверку типов во время компиляции. И любой тип также полезен, когда вы знаете только тип некоторых данных. Например, у вас есть массив, содержащий данные разных типов:

let list: any[] = [1, true, 'free']

list[1] = 100

пустота

В некотором смысле тип void является противоположностью любого типа, он представляет собой отсутствие какого-либо типа. Когда функция не возвращает значение, вы обычно видите, что ее тип возвращаемого значения — void:

/* 表示没有任何类型, 一般用来说明函数的返回值不能是undefined和null之外的值 */
function fn(): void {
    
    
  console.log('fn()')
  // return undefined
  // return null
  // return 1 // error
}

Объявление переменной типа void бесполезно, так как вы можете только присвоить ей значение undefined и null:

let unusable: void = undefined

объект

object представляет непримитивный тип, то есть тип, отличный от числового, строкового и логического.

С типом объекта API, такие как Object.create, могут быть лучше представлены. Например:

function fn2(obj: object): object {
    
    
  console.log('fn2()', obj)
  return {
    
    }
  // return undefined
  // return null
}
console.log(fn2(new String('abc')))
// console.log(fn2('abc') // error
console.log(fn2(String))

тип союза

Типы объединения означают, что значение может быть одним из многих типов. Требования 1. Определите функцию для получения строкового значения числа или строкового значения.

function toString2(x: number | string): string {
    
    
  return x.toString()
}

Требование 2. Определите функцию для получения длины числового или строкового значения.

function getLength(x: number | string) {
    
    
  // return x.length // error

  if (x.length) {
    
    
    // error
    return x.length
  } else {
    
    
    return x.toString().length
  }
}

утверждение типа

Это способ сказать компилятору: «Поверь мне, я знаю, что делаю» через утверждения типа. Утверждения типов аналогичны преобразованиям типов в других языках, но без специальной проверки данных и деструктурирования. Он не влияет на время выполнения, он работает только на этапе компиляции. TypeScript предполагает, что вы, программист, выполнили необходимые проверки.

Утверждения типов бывают двух видов. Один - это синтаксис "угловых скобок", другой - синтаксис as

/*
类型断言(Type Assertion): 可以用来手动指定一个值的类型
语法:
    方式一: <类型>值
    方式二: 值 as 类型  tsx中只能用这种方式
*/
/* 需求: 定义一个函数得到一个字符串或者数值数据的长度 */
function getLength(x: number | string) {
    
    
  if ((<string>x).length) {
    
    
    return (x as string).length
  } else {
    
    
    return x.toString().length
  }
}
console.log(getLength('abcd'), getLength(1234))

вывод типа

Вывод типа: TS выводит тип в следующих двух ситуациях, когда нет четко определенного типа: 1. Когда переменной присваивается значение, предполагается, что она имеет соответствующий тип 2. Когда переменной не присваивается значение , предполагается, что это любой тип

/* 定义变量时赋值了, 推断为对应的类型 */
let b9 = 123 // number
// b9 = 'abc' // error

/* 定义变量时没有赋值, 推断为any类型 */
let b10 // any类型
b10 = 123
b10 = 'abc'

おすすめ

転載: blog.csdn.net/qq_45297578/article/details/117091993