首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript 演化史 — 第二章】基于控制流类型分析 和 只读属性

image.png 基于控制流类型分析 TypeScript 官网总结了基于控制流类型分析: TypeScript 2.0 实现了对局部变量和参数控制流类型分析。...使用 TypeScript 2.0,类型检查器会分析语句和表达式所有可能控制流,在任何指定位置对声明为联合类型局部变量或参数产生最可能具体类型(缩小范围类型)。...下面的示例演示了 TypeScript 如何理解赋值局部变量影响,以及如何相应地缩小该变量类型: let command: string | string[]; command = "pwd"...ReadonlyArray 类型使用这样索引签名来阻止对索引属性赋值: interface ReadonlyArray { readonly length: number; /...ReadonlyArray 类型使用这样索引签名来阻止对索引属性赋值: interface ReadonlyArray { readonly length: number; //

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

接口_TypeScript笔记3

写在前面 对于对象等复杂结构类型TypeScript理念是鸭子类型(duck typing),即值“形状”: Type-checking focuses on the shape that values...,后者用来约束属性(变量声明之外场景) 特殊,只读数组有一种特别的类型表示ReadonlyArray: let ro: ReadonlyArray = [1, 2, 3, 4]...、shift等),因此不允许把只读数组赋值普通数组: // Type 'ReadonlyArray' is missing the following properties from...> -1; }; 函数类型会对2个东西进行检查: 参数类型 返回值类型 注意,参数名不必完全匹配(不要求参数名一定是source和subString,按参数位置依次检查) 二.数组 数组类型也可以用接口表示...之所以叫索引签名,是因为它能够描述可索引值类型,例如StringArray表示能够通过数值索引访问字符串值 注意,只有两种合法索引签名,分别是string和number,并且二者不能同时出现: interface

60330

TypeScript入门第一天,所有类型+基础用法+接口使用

world'; // 越界元素会使用联合类型替代,可以赋值(string | number)类型 枚举 enum 枚举类型用于定义数值集合,可以为一组数值赋予友好名字。...这里有个细节就是变量声明 : const是对let一个增强,它能阻止对一个变量再次赋值。如果在同一作用域内重复声明某个变量或常量就会报错,所有typescript内推荐使用它们来代替 var。...三、typescript接口 TypeScript核心原则之一是对值所具有的结构进行类型检查,接口是一系列抽象方法声明,是一些方法特征集合,这些方法都应该是抽象,需要由具体类去实现,然后第三方就可以通过这组抽象方法调用...: number; } //函数传入参数对象中只有部分属性赋值了,这里只接口来定义color赋值了 function createSquare(config: SquareConfig...TypeScript具有ReadonlyArray类型,可以确保数组创建后再也不能被修改 let A: number[] = [1, 2, 3, 4]; let B: ReadonlyArray<

62000

TypeScript 演化史 — 第三章】标记联合类型 与 never 类型

本质上,编译器跟踪程序控制流以缩小标记联合类型。除了 switch 语句之外,它还要考虑条件以及赋值和返回影响。...这些是 never 类型的确切特征,如下所述: never 是所有类型类型并且可以赋值所有类型。 没有类型是 never 类型或能赋值 never(never类型本身除外)。...直观地说,类型检查器知道,一旦咱们检查了 value 是字符串,它就不能是数字,反之亦然 function controlFlowAnalysisWithNever( value: string...在这种情况下,TypeScript 推断出 never 类型,因为咱们已经将 value 参数注解为类型string | number,也就是说,除了string 或 number, value 参数不可能有其他类型...但是,咱们也就不能对 value 做任何有用事情,因为它类型是 never,所以咱们编辑器工具不会显示自动显示提示该值有哪些方法或者属性可用。 ?

1K20

初探 TypeScript函数基本类型泛型接口类内置对象

: 参数类型和返回值类型;在 TypeScript 类型定义中, => 用来表示函数定义,左边是输入类型,需要用括号括起来,右边是输出类型,和 ES6 箭头函数不一样 可选参数和默认参数 TypeScript...result0 = buildName(12, 12); //提示 12 类型参数不能赋值 string let result1 = buildName('Bob') //提示应该有两个参数...} let c:Color = Color.Green 复制代码 any 在编程阶段还不清楚类型变量指定一个类型,值可能是动态输入,但是 Object 类型变量值允许你她赋任意值,不能在他上面调用方法...复制代码 TypeScript 具有 ReadonlyArray 类型,它与 Array 相似只是把所有的可变方法去掉了,确保数组创建后再也不能被修改 readonly vs const...`as` 语法 复制代码 2.使用索引签,对象赋值另一个变量,对象字面量会被特殊对待而且会经过 额外属性检查,当将它们赋值变量或作为参数传递时候 let squareOptions = { colour

7.3K31

TS 从 0 到 1 - 接口

TypeScript 中,接口是一个非常灵活概念,除了可以用于对类一部分进行抽象以外,也常用于对「对象形状(Shape)」进行描述。...: number; } 此外,TypeScript 还提供了 ReadonlyArray 类型,它与 Array 相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改:...接口和类型别名不是互斥。接口可以扩展类型别名,但类型别名不能扩展接口。...{ x: number; } type Point = PartialPointX & { y: number; } # 实现 类可以以相同方式实现接口或类型别名,但类不能实现使用类型别名定义联合类型...x = 1; y = 2; } # 接口合并 接口可以合并,但类型别名不能。多次声明同一个接口,会自动合并为一个接口。

22610

前端应该掌握Typescript基础知识

, 特别是一些很低级错误 帮助我们在写代码时候提供更丰富语法提示, 方便查看定义对象上属性和方法 比如: 你函数传了一个对象, 你在函数实现时候还得记住对象里面都有啥参数, 你定义参数名字是啥..., 可以赋值其他类型变量 strictNullChecks 为 true 的话不能赋值其他类型 let str: string; str = null; str = undefined; 任意类型...:void => {} never 类型 永远不存在值 任何类型类型, 可以赋值任何类型 但是任何类型都不可赋值 never, 包括 any function error(msg: string...如果变量定义时候没有赋值, 默认是 any 类型 let x; // 可以赋值为任何类型值 let x1 = '生生世世'; // x1会推论成sring类型, 不能给x1赋值为其他类型了 // x1...App; 结构类型系统 接口兼容性 ts 类型检查原则, 有一个东西看起来像鸭子、听起来像鸭子、叫起来也像鸭子,那么我们就可以认为他是鸭子 当一个类型 Y 可以被赋值另一个类型 X 时, 就可以说类型

57510

掌握 TypeScript:20 个提高代码质量最佳实践

类型推断是 TypeScript 编译器根据变量赋值值自动推断变量类型能力。这意味着你不必在每次声明变量时都显式指定类型。相反,编译器会根据值推断类型。...它使一个数组变成只读状态,在创建后不能被修改。...let numbers: ReadonlyArray = [1, 2, 3]; numbers.push(4); // TypeScript会报错,因为“numbers”是只读 最佳实践...其中,一些最佳实践包括尽可能使用 TypeScript 类型系统、使用函数和方法参数默认值、使用可选链操作符等。此外,该文章还强调了在使用类时,应该使用访问修饰符,以避免出现不必要错误。...例如,应该尽可能使用函数和方法参数默认值,以避免参数为空或未定义时错误。

4K30

TypeScript 2.9+ 版本中几个知识点

它被认为是安全版 any,与 any 不同是,unknown 仅能赋值 any、unknown 类型,以及 unknown 上不存在任何属性与方法。...let a: any = 10; // 任何类型都能赋值 any let u: unknown = 10; // 与 any 一样,任何类型都能赋值 unknown let...s1: string = a; // any 能赋值任何类型 let s2: string = u; // 不能把 unknown 赋值除 any、unknow 以外其他类型 a.method...此外,在即将发布 3.5 版本中,泛型参数隐式类型由 {} 类型,变成 unknown,即,在 3.5 以下版本时,可以: function test(params: T) { return...,在接下来将不能被重新赋值: let x: 'hello' = 'hello'; // x 类型是 hello // 或者是 x = 'hello' as 'hello' // error,不能重新赋值

1.6K20

Typescript 使用日志(干货)

•数组类型•元组类型•字面量类型•接口类型 3、如果一个类型不能满足要求怎么办? •可空类型,默认任何类型都可以被赋值成 null 或 undefined。...例如:案例中 doSomeThing 在传一个参数时候被提示为 number 类型,传两个参数的话,第一个参数就必须是 string 类型。...// 如果函数中所有参数,都可以在赋值目标中找到,就能赋值 let fun1 = function (a: number, b: string) {}; let fun2 = function (a:...number) {}; fun1 = fun2; fun2 = fun1; // 报错, fun1 中 b 参数不能再 fun2 中找到 函数参数兼容 函数参数兼容,采用是双向协变。...•Partial,将 T类型都变为可选。•Exclude,从 T 中剔除可以赋值 U 类型。•Extract,提取 T 中可以赋值 U 类型

2.4K10
领券