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

Kotlin中,函数作为参数T.()->Unit ()->Unit 区别

在做kotlin开发中,经常看到一些系统函数里,用函数作为参数,但是又和我们自己写不太一样 大概是这样子: public inline fun T.apply(block: T....() -> Unit): T { block() return this } 一开始时候,我很疑惑,我们平时定义是这样子啊: fun T.hahaha(...---- 我们首先定义两个函数: fun T.afterMersure(f: T.() -> Unit) { } fun T.afterMersure2...(f: () -> Unit) { } 这两个函数是用于,View测量完成之后回调。...,这两个函数唯一区别就是T.()-Unit与()->Unit区别,我们调用时,在代码块里面写this,时候,根据代码提示,我们可以看到,连个this代表含义不一样,T.()->Unit里this

2K30

从 JavaScript 到 TypeScript

TypeScript 并不是一个完全新语言, 它是 JavaScript ,为 JavaScript 生态增加了类型机制,最终将代码编译为纯粹 JavaScript 代码。...它支持 JavaScript 所有语法语义,同时通过作为 ECMAScript 来提供一些额外功能,如类型检测更丰富语法。...除了描述带有属性普通对象外,接口也可以描述函数类型。定义函数类型接口就像是一个只有参数列表返回值类型函数定义。参数列表里每个参数都需要名字类型。...初探泛型 如下代码,我们给 Hello 函数添加了类型变量 TT 帮助我们捕获用户传入类型(比如:string)。我们把这个版本 Hello 函数叫做泛型,因为它可以适用于多个类型。...代码中 output output2 是效果是相同,第二种方法更加普遍,利用了类型推论 —— 即编译器会根据传入参数自动地帮助我们确定T类型: function Hello(arg

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

【HormonyOS4+NEXT】TypeScript基础语法详解

前言 TypeScript是一种由微软开发开源编程语言,它是JavaScript一个超,添加了静态类型、类、接口泛型等特性。...函数TypeScript中,我们可以为函数参数返回值指定类型。这有助于我们在编写函数时明确函数输入输出,从而提高代码可读性可维护性。...如下,我们定义了一个名为greeter函数,它接受一个string类型参数person,返回一个string类型结果。然后,我们调用这个函数传入一个字符串变量user作为参数。...如下例子:identity 函数是一个泛型函数,它接受一个类型为 T 参数返回相同类型值。这里 T 是一个类型参数,它代表了在函数被调用时可以指定任意类型。...这告诉 TypeScript,我们打算在函数中使用一个或多个类型作为参数。 arg: T函数参数 arg 类型被指定为 T,意味着它可以是任何类型。

7810

了不起 TypeScript 入门教程

它是 JavaScript 一个超,而且本质上向这个语言添加了可选静态类型基于类面向对象编程。...可以在编译期间发现纠正错误 作为一种解释型语言,只能在运行时发现错误 强类型,支持静态动态类型 弱类型,没有静态类型选项 最终被编译成 JavaScript 代码,使浏览器可以理解 可以直接在浏览器中使用...作为开发者,这给了我们很大自由:TypeScript 允许我们对 any 类型值执行任何操作,而无需事先执行任何形式检查。...函数类型 无函数类型 必填可选参数 所有参数都是可选 默认参数 默认参数 剩余参数 剩余参数 函数重载 无函数重载 7.2 箭头函数 1.常见语法 myBooks.forEach(() => console.log...设计泛型关键目的是在成员之间提供有意义约束,这些成员可以是:类实例成员、类方法、函数参数函数返回值。 泛型(Generics)是允许同一个函数接受不同类型参数一种模板。

6.9K52

TypeScript 实战算法系列(四):实现集合各种集合运算

前言 集合是一种不允许值重复顺序数据结构。 本文将详解集合实现思路使用TypeScript实现类似于ES6中Set集合以及集合基本运算,欢迎各位感兴趣开发者阅读本文。...声明集合变量,值为Set类型 遍历当前实例集合中所有元素,将其放进变量集合中 遍历传进来集合参数,将其放进变量集合中 返回变量集合 交集运算(intersection),给定两个集合...export default class Set{ } 在class类中声明构造器以及实现集合函数需要变量 interface setItemsType { [propName:...(union) union(otherSet: Set){ // 声明变量 const unionSet = new Set(); this.values...(1); B.add(2); B.add(3); // 求AB console.log("AB",A.union(B).values()); // 求AB交集 console.log

3.4K21

TypeScript入门

增强 可维护性增强:在编译阶段暴露大部分错误 => 多人合作大型项目中,获得更好稳定性开发效率 JS : 包含于兼容所有 JS 特性,支持共存 支持渐进式引入与升级 # 基本语法.../* 对 getDate 函数进行重载,timestamp 为可缺省参数 */ function getDate(type: 'string ' , timestamp?...: IGetRepeatStringArr = target => new Array(100).fill(target); /* 报错:类型 "number” 参数不能赋给类型"string" 参数...: IGetRepeatArr = target => new Array(100).fill(target); /* 报错:类型 “string"参数不能赋给类型"number" 参数 */ getRepeatArr...类型 A: 类型 B // 关键字【infer】出现在类型推荐中,表示定义类型变量,可以用于指代类型 // 如该场景下,将函数返回值类型作为变量,使用新泛型 R 表示,使用在类型推荐命中结果中

1.4K20

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

TypeScript是 JavaScript 一个超。他 JavaScript 有着千丝万缕关系。...函数是 JavaScript 里面最基本单位,我首先从函数入手慢慢去学习更多 TypeScript 语法,进而进一步掌握 ts用法; 需要验证函数参数类型,最基本包括,string number...: 参数类型返回值类型;在 TypeScript 类型定义中, => 用来表示函数定义,左边是输入类型,需要用括号括起来,右边是输出类型, ES6 箭头函数不一样 可选参数默认参数 TypeScript...let myIdentity1:{ (arg:T):T} = identity 复制代码 可以使用带有调用签名对象字面量来定义泛型函数,我们可以将对象字面量拿出来作为一个接口,将一个泛型参数当做整个接口一个参数...;他有一个调用签名,参数列表返回值类型函数定义,参数列表里每一个参数都需要名字类型,函数参数名不需要与接口里定义名字相匹配,如果你没有指定参数类型,TypeScript 类型系统会推断出参数类型

7.2K31

使用 TypeScript 开发你项目

TypeScript 最早是在 2012 年十月份由微软开源在 GitHub 上,它是 JavaScript 一个超,除了能让我们使用 ES Future 各种语法外,还提供如 Enum、Tuple...不同于 JSDoc,TypeScript 提供类型声明模块接口形成了文档形状,提供程序行为提示,并在编译时会校验程序正确性。 改动下上个例子: 当然,对大型项目来说,这可能要复杂多。...index: number, array: T[]) => T ) => T 给泛型加一个默认值,加个可选参数: type SomeMethod = ( callback...: (value: T, index: number, array: T[]) => T, thisArg?...P] 实际上 TypeScript 2.4 版本以后,可以对函数调用返回值进行判断 function arrayMap( f: (x: T) => U ): (a: T[]) => U

8910

使用 TypeScript 开发你项目

TypeScript 最早是在 2012 年十月份由微软开源在 GitHub 上,它是 JavaScript 一个超,除了能让我们使用 ES Future 各种语法外,还提供如 Enum、Tuple...不同于 JSDoc,TypeScript 提供类型声明模块接口形成了文档形状,提供程序行为提示,并在编译时会校验程序正确性。 改动下上个例子: ? 当然,对大型项目来说,这可能要复杂多。...index: number, array: T[]) => T ) => T 复制代码 给泛型加一个默认值,加个可选参数: type SomeMethod = ( callback...: (value: T, index: number, array: T[]) => T, thisArg?...=> T[P] 复制代码 实际上 TypeScript 2.4 版本以后,可以对函数调用返回值进行判断 function arrayMap( f: (x: T) => U ): (a:

1.3K20

1.8W字|了不起 TypeScript 入门教程(第二版)

它是 JavaScript 一个超,而且本质上向这个语言添加了可选静态类型基于类面向对象编程。...1.1 TypeScript 与 JavaScript 区别 TypeScript JavaScript JavaScript 用于解决大型项目的代码复杂性 一种脚本语言,用于创建动态网页 可以在编译期间发现纠正错误...函数类型 无函数类型 必填可选参数 所有参数都是可选 默认参数 默认参数 剩余参数 剩余参数 函数重载 无函数重载 7.2 箭头函数 1.常见语法 myBooks.forEach(() => console.log...设计泛型关键目的是在成员之间提供有意义约束,这些成员可以是:类实例成员、类方法、函数参数函数返回值。 泛型(Generics)是允许同一个函数接受不同类型参数一种模板。...图中 内部 T 被称为类型变量,它是我们希望传递给 identity 函数类型占位符,同时它被分配给 value 参数用来代替它类型:此时 T 充当是类型,而不是特定 Number 类型

10K51

如何发布一个 TypeScript 编写 npm 包

项目我们库称为digx。它允许从嵌套对象中根据路径找出值,类似于lodash中get函数。...npm i -D jest @types/jest ts-jestts-jest包是Jest理解TypeScript所需要。另一个选择是使用babel,这将需要更多配置额外模块。...我们模块导出一个单一函数,digx。它接收任意对象,字符串参数path,以及可选参数shouldThrow,该参数使得提供路径在源对象嵌套结构中不被允许时,抛出一个异常。...嵌套结构可以是对象和数组,也可以是MapSet。使用npm t运行测试,当然,不出意外会失败。...因为我们库会作为ES Module被使用,因此需要指定"type": "module"。namedescription也应填写。接着,我们应该处理好我们希望发布文件。

1.4K20

盘点前端面试常见15个TS问题,你能答对吗?

Typescript 是 JavaScript ,可以被编译成 JavaScript 代码。 用 JavaScript 编写合法代码,在 TypeScript 中依然有效。...作为强类型语言,你可以明确知道数据类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。像 Asana、Circle CI Slack 这些公司都在用 TS。... function createArray(length: number, value: T): Array { let result: T[] = []; for...对方法传入参数返回值进行约束 // 注意区别 // 普通接口 interface discount1{ getNum : (price:number) => number } // 函数类型接口...interface discount2{ // 注意: // “:” 前面的是函数签名,用来约束函数参数 // ":" 后面的用来约束函数返回值 (price:number):number

3.3K40

学会这15个TS面试题,拿到更高薪offer

Typescript 是 JavaScript ,可以被编译成 JavaScript 代码。 用 JavaScript 编写合法代码,在 TypeScript 中依然有效。...作为强类型语言,你可以明确知道数据类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。像 Asana、Circle CI Slack 这些公司都在用 TS。... function createArray(length: number, value: T): Array { let result: T[] = []; for...对方法传入参数返回值进行约束 // 注意区别 // 普通接口 interface discount1{ getNum : (price:number) => number } // 函数类型接口...所以,我们学习我们这套 TypeScript 课程,需要具备 ECMAScript 语言基础: 熟悉语法基础(变量、语句、函数等基础概念) 掌握内置对象(Array、Date 等)使用 面向对象基本概念

3.5K50

Ramda 鲜为人知一面

在我们查阅Ramda文档时, 常会见到一些"奇怪"类型签名用法:"奇怪"类型签名: (Applicative f, Traversable t) => (a → f a) → t (f a)...R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'这些"奇怪"点背后隐藏着Ramda 背后"更深"一层设计, 本文将会对此作出讲解, 阐述背后通用函数式编程理论知识...TypeScript 语法::), 好吧, 这段类型没法简单地翻译成TypeScript, 因为:TypeScript 不支持将类型构造器作为类型参数.举个例子:type T = F;报错信息如下:Type 'F' is not generic.在类型签名中F是一个类型构造器, 既Array一样返回类型类型.然而, TypeScript 里根本无法声明"一个类型参数为类型构造器..., 调用函数后, 将函数返回值重新包裹进上下文中返回.这里上下文是一个泛指, 比如我们可以将其特异化(specialize)为Promise :type AP = (f: Promise

1K50
领券