TypeScript基础篇 - TS日常类型 上篇

目录

TS的常见用法介绍

example01.ts

逃避类型检查:any

思考一下~:不知道类型

类型标注

函数(参数和返回值)

匿名函数

TS如何知道匿名函数的类型?


TS是一种标注式语言,不侵入JS的设计

TS的常见用法介绍

文章内容

  • 基础类型、数组
  • any/unkown
  • 类型标注
  • 函数
  • 对象类型
  • 联合
  • 别名
  • 接口
  • 断言
  • 字面类型
  • null and undefined
  • 枚举类型

基础类型、数组

  • string,number,boolean,null【人为赋值null】,undefined【就是没有设置值】
  • Array,T代表数组中元素类型
    • 为什么要求数组中类型统一?人类思考问题的方式;类型的方式思考程序,如一组人
javascript 复制代码
// null;undefined
const a = {}
a["aaa"] // undefined
a["aaa"] = null // null
if(a["aaa"] === null) {}
// js 
new Array()
// TS;浏览器中不支持;要有1TS环境
new Array<T>()

example01.ts

TypeScript 复制代码
// js语法
const a = new Array()
// ts语法
const b = new Array<string>()// 泛型,定义数组每项元素只能式string
b.push('123')// b只能push字符串,其他类型都会编译报错

// 让typescript认为当前文件是一个模块,这个文件里的变量都是局部的
export {}

逃避类型检查:any

TypeScript 复制代码
let obj:any = { x: 0 };
// 后续都不会被检查
// `any`屏蔽了所有类型检查,相当于你相信你对程序的理解式高于TS的
obj.foo();
obj();
obj.bar = 100;
obj = "hello";
const n: number = obj;
const a: {[key: string] :number} = { x: 1 };
a.y = 2
a.z = 3
a.o = "123" // 报错

思考一下~:不知道类型

为什么要提供unknown?

TypeScript 复制代码
let value: unknown;
value = true; // ok
value = 42; // ok
value = "hello"; // ok
let value3:boolean = value; // Error

类型标注

TypeScript 复制代码
let myName:string = "Alice"; // :string 标注类型为字符串
let yourName = "Bob"; // 未明确标注类型,会推到出此类型为string

函数(参数和返回值)

TypeScript 复制代码
// greet : string -> number (Haskell)
function greet(name: string): number {
    console.log("Hello," + name.toUpperCase() + "!!");
}
greet(42) // Error ,要求string
let x: string = greet("omg") // Error , x要求字符串,返回值要求数字

匿名函数

TypeScript 复制代码
const names = ["Alice", "Bob", "Erice"];
// Array<string>
names.forEach(function (s) {
    // s: string // 类型的上下文推到 contextual mapping
    console.log(s.toUppercase());
});
names.map(value => {
    // value: string // 类型的上下文推到 contextual mapping
   const y: number = value // Error
});
names.forEach((s) => {
    console.log(s.toUppercase());
})

TS如何知道匿名函数的类型?

contexture Typing技术

  • 根据上下文(Context)推导类型
  • 还有什么是Context Typing?

上下文是指程序间组件共享的知识,可以是任何东西

TypeScript 复制代码
class A {
    foo(){
        // this就是类A的上下文
        this.bar()    
    }
    bar(){
            
    }
}
function foo2() { // 闭包
    const x = 1
    function bar() { // 子闭包
            
    }
}
相关推荐
一颗花生米。14 分钟前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
学习使我快乐0118 分钟前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
bobostudio199519 分钟前
TypeScript 设计模式之【策略模式】
前端·javascript·设计模式·typescript·策略模式
勿语&1 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
黄尚圈圈1 小时前
Vue 中引入 ECharts 的详细步骤与示例
前端·vue.js·echarts
浮华似水2 小时前
简洁之道 - React Hook Form
前端
正小安4 小时前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch6 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光6 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   6 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发