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

【错误记录】Kotlin 代码运行时报错 ( init 初始化调用还未初始化的成员属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性 init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...; 二、问题分析 ---- 从 初始化 角度分析 上述代码的执行顺序 , Kotlin 类 对象实例化 时会执行一系列的 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 属性赋值 类属性赋值...init 初始化的代码执行 次构造函数 的代码执行 首先 , 上述代码没有主构造 函数 , 因此该项忽略 ; 然后 , 执行属性的赋值 , 代码定义了 name 属性 , 但是没有进行赋值...name = "Tom" } 该问题的本质就是 , 成员属性 init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ;...三、解决方案 ---- 调换 初始化代码块 的代码顺序 , 先给 name 成员赋值 , 然后再执行 调用 name 成员的方法 ; class Hello{ var name: String

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

【TS 演化史 -- 16】数字分隔符和更严格的类属性检查

即使咱们稍微拼错了一个变量、属性或函数名,TypeScript 很多情况下都可以提示正确的拼写。 TypeScript 2.7 支持 ECMAScript 的数字分隔符提案。...TypeScript 2.7 引入了一个新的编译器选项,用于类严格属性初始化检查。...} const user = new User("mariusschulz"); // OK const username = user.username.toLowerCase(); 请注意,严格属性初始化要求构造函数中所有可能的代码路径明确分配每个属性...,也没有undefined的类型,则类型检查器要求直接在构造函数初始化属性;否则,严格属性初始化检查将失败。...如果咱们希望在帮助方法初始化属性,或者让依赖项注入框架来初始化属性,那么这是有问题的。在这些情况下,咱们必须将一个明确的赋值断言(!)

1.3K50

如何处理TypeScript的可选项和Undefined

项目中设置TypeScript严格模式,将会检查代码的所有潜在问题。我建议你尽可能的让TypeScript更为严格(strict)。...undefined通常会出现在几个关键地方: 对象初始化或者不存在的属性 函数中被忽略的可选参数 用来表明请求值丢失的返回值 可能未被初始化的变量 TypeScript拥有处理上述所有问题的工具。...当你对一个对象访问并不存在的属性时,JavaScript将会返回undefined,而不是报错TypeScript严格模式下,这意味着下面几种情况。...; 类型、接口或类的定义属性名称添加?将会把该属性标记为「可选」的。 type Foo = { bar?...而且支持c对象,用来表明bar属性是undefined 。 TypeScript注意这段代码。if子句中,会把bar属性的类型收窄为number。

3.6K10

TypeScript 官方手册翻译计划【十二】:类

TypeScript 不会分析构造器调用的方法以检测初始化语句,因为派生类可能重写这些方法,导致初始化成员失败。...对于访问器,TypeScript 有一些特殊的推断规则: 如果 get 存在而 set 不存在,那么属性自动成为只读属性 如果没有指定 setter 参数的类型,那么基于 getter 返回值的类型去推断参数类型...: const b: Base = new Derived(); // 因为 name 是 undefined,所以报错 b.greet(); 初始化顺序 JavaScript 类的初始化顺序某些情况下可能让你感到意外...成员可见性 你可以使用 TypeScript 控制特定的方法属性是否类的外面可见。 public 类成员的默认可见性是公有的(public)。...this 参数 TypeScript方法或者函数定义,第一个参数的名字如果是 this,那么它有特殊的含义。

2.5K10

前端入门25-福音 TypeScript声明正文-TypeScript

抽象类 JavaScript 虽然 ES6 引入了 class 的写法,但本质上只是语法糖,并没有类似 Java 抽象类、抽象方法的机制存在,即使要模拟,只能是定义一些抛异常的方法来模拟抽象方法...如果是 JavaScript ,这段代码运行期间并不会报错不会导致程序异常,js 解释器认为它是合理的,它会认为这个函数是用来增加全局对象的 mian 属性,同时函数参数它也不知道开发者希望使用的是什么类型... WebStrom 右键 -> 新建文件,可以选择创建 TypeScript 的文件,可以设置 FileWatcher 来自动编译,可以将项目初始化成 node.js 项目,利用 package.json...问号表示该属性可有可没有,可用 readonly 来表示该属性为只读属性,那么定义时初始化后就不能再被赋值。 ?...,那么即使不同文件内,仍旧造成变量冲突。

3.2K21

作为JavaScript的“超集”,感受一下TypeScript 的那些黑魔法

TypeScript,有很多选项都可以精确地控制此边界,下文选自《深入理解TypeScript》一书,现在就让我们去了解它们吧。...一个非null的断言实质上意味着你告诉编译器“我知道它不是null,但是请让我使用它,即使它不是null”。 ◆ 明确赋值断言操作符 TypeScript将会对类初始化属性抛出错误。...1class C { 2 foo: number; // 可以,已经构造器初始化 3 bar: string = "hello"; // 可以,已经初始化...= 42; 9 } 10} 你可以使用明确赋值断言,属性名后加后缀,来告诉TypeScript你已经在其他地方(不是构造器)对它进行了初始化。...,让编译器不再抛出错误,即使代码并没有被分配属性

1K20

TypeScript学习笔记(三)—— 编译选项、声明文件

TS编译器所编译 compilerOptions 编译选项是配置文件中非常重要比较复杂的配置选项 compilerOptions包含多个子选项,用来完成对编译的配置 项目选项...strictFunctionTypes 严格检查函数的类型 strictNullChecks 严格的空值检查 strictPropertyInitialization 严格检查属性是否初始化...*/ "strict": true, // 启⽤所有严格类型检查选项 "noImplicitAny": true, // 表达式和声明上有隐含的 any类型时报错 "strictNullChecks...: 这是一个最普通不过的 js 文件,对外暴露 sum () 方法 nodejs 运行。...typescript 编译器看到的每个变量、方法都必须明确知道它的类型, src/index.ts 文件中导入 src/sum/index.js 文件,js 文件方法是没有类型的,造成 typescript

2.4K20

【TS】612- 了不起的 tsconfig.json 指南

TypeScript 开发,tsconfig.json 是个不可或缺的配置文件,它是我们 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...初始化 tsconfig.json 初始化操作,也有 2 种方式: 手动项目根目录(或其他)创建 tsconfig.json 文件并填写配置; 通过 tsc --init 初始化 tsconfig.json...当入口文件依赖其他文件时,不需要将被依赖文件指定到 files ,因为编译器自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...按顶层属性分类 tsconfig.json 文件按照顶层属性,分为以下几类: ? ? 2. 按功能分类 ?...当然,本文篇幅有限,无法针对每个属性进行深入介绍,这就需要大家实际开发,多去尝试和使用啦~

2K30

TypeScript 初学者入门学习笔记(一)

基于原型的面向对象编程,使得原型上的属性方法可以在运行时被修改。 TypeScript 的类型系统,很大程度上弥补了 JavaScript 的缺点。 为什么使用 TypeScript?...编译时即使报错,还是会生成编译结果,仍然可以使用编译之后的文件,若想在报错时终止 js文件的生成,可以 tsconfig.json 配置 noEmitOnError 即可。...line4:data 被推断为 number,访问length 属性报错。 对象的类型——接口 TS,使用接口(Interfaces)来定义对象的类型。...对象的一些字段只能在创建时被赋值,可以使用 **readonly **定义只读属性: 例一:使用 readonly 定义的属性 id 初始化后,又被重新赋值,所以会报错。...数组的一些方法的参数根据数组定义时约定的类型进行限制: let arr2: number[] = [1, 1, 2, 3, 5]; arr2.push('8'); //报错:Argument

1.8K20

了不起的 tsconfig.json 指南

TypeScript 开发,tsconfig.json 是个不可或缺的配置文件,它是我们 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...初始化 tsconfig.json 初始化操作,也有 2 种方式: 手动项目根目录(或其他)创建 tsconfig.json 文件并填写配置; 通过 tsc --init 初始化 tsconfig.json...当入口文件依赖其他文件时,不需要将被依赖文件指定到 files ,因为编译器自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...按顶层属性分类 tsconfig.json 文件按照顶层属性,分为以下几类: 2....当然,本文篇幅有限,无法针对每个属性进行深入介绍,这就需要大家实际开发,多去尝试和使用啦~

2.8K10

了不起的 tsconfig.json 指南

[封面.png] TypeScript 开发,tsconfig.json 是个不可或缺的配置文件,它是我们 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...初始化 tsconfig.json 初始化操作,也有 2 种方式: 手动项目根目录(或其他)创建 tsconfig.json 文件并填写配置; 通过 tsc --init 初始化 tsconfig.json...当入口文件依赖其他文件时,不需要将被依赖文件指定到 files ,因为编译器自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...按顶层属性分类 tsconfig.json 文件按照顶层属性,分为以下几类: [tsconfig.json 文件结构(顶层属性).png] [了不起的 tsconfig.json 指南.png]...解决方法有2种: 指定 this 类型,如本代码为 HTMLElement 类型: HTMLElement 接口表示所有的 HTML 元素。

2.5K42

TypeScript学习笔记(一)—— TypeScript入门

基于原型的面向对象编程,使得原型上的属性方法可以在运行时被修改。 函数是 JavaScript 的一等公民,可以赋值给变量,可以当作参数或返回值。...,能在变量初始化时自动推论出它是一个 number 类型。...'number'. // 编译时会报错(数字没有 split 方法),无法通过编译 1.2.3、TypeScript 是弱类型 类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型。...TypeScript 不管加号两侧是什么类型,都可以通过隐式类型转换计算出一个结果——而不是报错——所以 JavaScript 和 TypeScript 都是弱类型。...事实上,就算你从来没学习过 TypeScript,你可能已经不知不觉中使用到了 TypeScript—— VSCode 编辑器编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript

1.1K10

TypeScript 官方手册翻译计划【一】:基础

也许你觉得这是“理所当然的”,并且你觉得,访问对象上不存在的属性时,抛出一个错误。但恰恰相反,JavaScript 的表现和我们的预想不同,它返回的是 undefined。...这意味着 TypeScript 能用于编辑代码。我们在编辑器输入的时候,核心的类型检查器能够提供报错信息和代码补全。人们经常会谈到 TypeScript 工具层面的作用,这就是一个典型的例子。...很多情况下,即使省略了类型注解,TypeScript 可以为我们推断出类型。 let msg = 'hello there!'...如果可能,新项目应该始终启用这些严格性配置。 TypeScript 有几个和类型检查相关的严格性设置,它们可以随时打开或关闭,如若没有特殊说明,我们文档的例子都是开启所有严格性设置的情况下执行的。...CLI 的 strict 配置项,或者 tsconfig.json 的 "strict: true" 配置项,可以一次性开启全部严格性设置。当然,我们可以单独开启或者关闭某个设置。

89110

Node.js项目TypeScript改造指南

TypeScript 越来越火,本文不讲为什么要使用 TypeScript不讲基本概念。.../node_modules/.bin/tsc --init,初始化 TypeScript 项目,生成一个 tsconfig.json 配置文件 备注:如果第1步选择全局安装,那第2步可以直接使用tsc...执行初始化命令后会生成一份默认配置文件,更详细的配置及说明可以自行查阅官方文档,这里根据前面的项目结构贴出一份基本的推荐配置,部分配置下文解释。...Class构造函数this.xx初始化报错 Class 的构造函数对 this 属性进行初始化是常见做法,但在 ts ,你得先定义。...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

4.5K10

Node.js 项目 TypeScript 改造指南

TypeScript 越来越火,本文不讲为什么要使用 TypeScript不讲基本概念。.../node_modules/.bin/tsc --init,初始化 TypeScript 项目,生成一个 tsconfig.json 配置文件 备注:如果第1步选择全局安装,那第2步可以直接使用tsc...执行初始化命令后会生成一份默认配置文件,更详细的配置及说明可以自行查阅官方文档,这里根据前面的项目结构贴出一份基本的推荐配置,部分配置下文解释。...Class构造函数this.xx初始化报错 Class 的构造函数对 this 属性进行初始化是常见做法,但在 ts ,你得先定义。...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

8.2K32

Node.js项目TypeScript改造指南

TypeScript 越来越火,本文不讲为什么要使用 TypeScript不讲基本概念。.../node_modules/.bin/tsc --init,初始化 TypeScript 项目,生成一个 tsconfig.json 配置文件 备注:如果第1步选择全局安装,那第2步可以直接使用tsc...执行初始化命令后会生成一份默认配置文件,更详细的配置及说明可以自行查阅官方文档,这里根据前面的项目结构贴出一份基本的推荐配置,部分配置下文解释。...Class构造函数this.xx初始化报错 Class 的构造函数对 this 属性进行初始化是常见做法,但在 ts ,你得先定义。...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

4.3K20

TypeScript】超详细的笔记式教程【上】

前言 之前了解过TypeScript学习过,但是项目中没有具体的使用过,导致忘得差不多了,最近公司不是很忙,学习的时间比较多,趁这个机会,快快的过一遍,然后准备用SolidJs + TypeScript...+ Vite做一个小项目,还看了看SvelteJs,感觉这个比SolidJs的生态似乎更好,可以巩固完TypeScript后学习一下这个,SvelteJs + Ts + Vite挺香嘛。...注意: Ts只会在编译与书写代码的过程给你相关的警告,Js的执行并不会有这样的警告,编译完的Js代码不会插入相关的校验代码。...let u: undefined = undefined let n: null = null 注意 有一个点需要注意一下 let isOk: boolean = new Boolean('') 这样抛出错误不能将类型...: number; } let alice: Person = { name: 'Alice' } 完全Ok 任意属性 如果我们需要在变量定义一些我们将来可能添加的属性,有极大的不确定性的话

1.1K30
领券