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

TypeScript-约束中使用类型参数

约束中使用类型参数概述一个被另一个约束, 就叫做 约束中使用类型参数博主需求: 定义一个函数用于根据指定的 key 获取对象的 value:let getProps = (obj: object..., key: string): any => { return obj[key];}如上的代码在编译器当中是会报错的,报错的原因就是它不知道 obj[key] 返回的到底是不是 any 这个类型,...如果这个时候我要获取一个 c 的 key 的 value 那么就直接是 undefined 了,说明一个问题,代码不够健壮, 明明 obj 中没有 c 这个 key 但是却没有报错,那么这时就可以利用 约束中使用类型参数...obj = { a: 'a', b: 'b'}let res = getProps(obj, "c");console.log(res);如上 K extends keyof T 的含义,...key 只能是 obj 当中存在的属性,如果指定的 key obj 当中不存在就不允许获取图片图片最后本期结束咱们下次再见~ 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎评论区留言

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

    Swift中some和any关键字的理解

    Swift中some和any关键字的理解 最新Swift版本中(Xcode14,Swift5.7),如果协议中有使用,则如果要将此协议作为参数类型,必须使用any关键字进行修饰。...其实在Swift5.1中也引入过一个some关键字,any和some都适用于协议,这两个关键字从语义上和写法上对的使用进行了优化。...,其实在此中情况下,虽然调用是我们传入的是Bird实例,但是由于协议类型约束较弱,函数执行时编译器会将其解释成了Fly类型,实际上产生了类型丢失。...尤其是当协议中有使用时,此时上面的写法最新的Xcode版本中会提示错误,需要我们添加any关键字。...any关键字的意义其实就是实现上述的语义,参数类型定义遵守某个协议的任意类型,如下: import Foundation protocol Fly { associatedtype T

    98010

    Swift5.7 扩展不透明类型(some)到参数

    介绍Swift 中的语法是为了类型通用性设计,这种通用性允许函数输入和输出时,使用复杂的类型集合来表达,前提是类型必须前后一致。...-> Void = f // ✅,推断不透明类型 StringSE-0328 这篇提议是讲结构化的不透明结果类型,它扩展了不透明结果类型,允许结果类型中的任何结构位置多次使用some P类型。...针对上述不同参数的报错,有一种可能的解决方案是:对于可变,可以隐式参数改为参数包,也就是模版中P改为P...,此时约束从遵循同一类型变成支持不同类型(感觉支持了所有类型?...这里不知道怎么写 */)很显然调用fn函数时,很难使用。因为调用者无法轻松创建未知的,未命名类型的参数值。相同的规则也运用在函数类型作为参数的情况。...总结通过当前提议 SE-0341,你应当知道:Swift5.7 通过运用 some 到参数类型,是为了去除型模块声明的冗余表达;some 对应的是与之等价的型模版表达式;内部通过类型推断,确定真实的不透明参数类型所对应的类型

    2.9K141

    swift

    Swift编程灵活性的一种语法,函数、枚举、结构体、类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定的,只有等到调用函数时才能确定具体类型的时候可以引入 可以理解...:就是占位符 型函数 函数的使用了占位类型名(在这里用字母 T 来表示)来代替实际类型名(例如 Int、String)。...(例如 T 和 MyTypeParameter)来类型参数命名,以表明它们是占位类型,而不是一个值 类型约束 类型约束可以指定一个类型参数必须继承自指定类,或者符合一个特定的协议或协议组合 一个类型参数名后面放置一个类名或者协议名...这个协议无法定义 ItemType 是什么类型的别名,这个信息留给遵从协议的类型来提供 struct Stack: Container { // Stack...where 语句 下面这个型函数类型参数里面添加了where子句约束,C1,C2都必须是采纳Container协议的类型,并且C1、C2的类型必须相同,而且C1的类型必须是符合Equatable

    14710

    Swift基础 通用

    通用是Swift最强大的功能之一,Swift标准库的大部分都是用通用代码构建的。事实上,即使您没有意识到这一点,您也一直使用整个语言指南中的。...没有这个要求,Dictionary就无法判断它是否应该插入或替换特定密钥的值,也无法已经字典中的给定密钥找到值。...您可以创建自定义类型时定义自己的类型约束,这些约束提供了编程的大部分功能。像Hashable抽象概念根据概念特征而不是具体类型来描述类型。...上下文,其中条款 当您已经类型上下文中工作时,您可以编写一个where子句,作为声明的一部分,该声明没有自己的类型约束。例如,您可以类型的下标或类型扩展中的方法上编写子句。...对于从另一个协议继承的协议,您可以通过协议声明中包含where子句来向继承的关联类型添加约束

    10300

    Swift学习:

    本篇详细总结介绍Swift的用法; Swift代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。它能让你避免代码的重复,用一种清晰和抽象的方式来表达代码的意图。...主要内容: 1.解决的问题 2.型函数 3.类型 4.扩展一个类型 5.类型约束 6.关联类型 一、解决的问题 Swift代码让你能够根据自定义的需求,编写出适用于任意类型...T>(:)函数调用时,才能根据所传入的实际类型决定T所代表的类型; 4.T只是一个符号,可以使用大写字母开头的驼峰命名法(例如T和MyTypeParameter)来类型参数命名,以表明它们是占位类型...三、类型 3.1.系统类型使用到的 事实上,类型的使用贯穿了Swift语言。例如,Swift的Array和Dictionary都是集合。...: U) { // 这里是型函数的函数体部分 } 5.2.类型约束实践 下面的型函数用于查找数组中某个元素的索引位置;但由于for循环里用到了对象比较"==",要确保所有的类型都适用,所以型函数的中添加了类型约束

    1.5K20

    Swift 进阶:

    Swift 最强大的特性之一,很多 Swift 标准库是基于代码构建的。实际上,甚至你都没有意识到语言指南中一直使用。...本章向你展示如何写出一个叫做Stack 的集合类型。栈是值的有序集合,和数组类似,但是比 Swift 的Array 类型有更严格的操作限制。数组允许在其中任何位置插入和移除元素。...所有 Swift 基本类型(比如 String 、Int 、Double 和 Bool )默认都是可哈希的。 创建自定义类型时,你可以定义你自己的类型约束,这些约束可以提供强大的编程能力。...Where分句 ---- 如类型约束中描述的一样,类型约束允许你型函数或类型相关的类型形式参数上定义要求。 类型约束在为关联类型定义要求时也很有用。通过定义一个Where分句来实现。...上边例子中的where 分句要求Item 遵循协议,但你同样可以写一个where 分句来要求Item 特定类型

    1.7K20

    Swift4语法新特性 原

    二、关联类型可以添加where约束子句     associatedtype是Swift协议中一个很有用的关键字,其也是Swift编程思想的一种实现。...protocol Container { //约束item Int类型 associatedtype Item where Item == Int func append...,Swift4中,subscript方法更加强大,其不只可以支持,而且可以支持where子句进行协议中关联类型约束,示例如下: //下标协议 protocol Sub { associatedtype...2.灵活性极高     Swift语言的灵活性非常有现代编程语言的特点,有其是其对的支持,是的面向协议的编程方式Swift语言上可以畅行无阻。...灵活性表现在如下几点: 1.强大的编程方式,协议关联类型等。 2.where子句可以精准的进行约束。 3.Optioal类型和可失败构造方法的支持。

    1.7K30

    Swift 中风味各异的类型擦除

    ——使得编译器可以保证所有关联的类型类型对齐,从而使我们可以请求存储独立的引用并作为数组的一部分——像这样: class RequestQueue<Response, Error: Swift.Error...有关线程安全的更多信息,请查看“避免Swift 中竞争条件”。 上面的方法效果很好,但有一些缺点。我们不仅引入了新的AnyRequest类型,还需要将RequestQueue转换为。...使用闭包擦除类型时,其思想是捕获闭包内部执行操作所需的所有类型信息,并使该闭包仅接受非(甚至是Void)输入。...未来,我们可能还会看到 Swift 中添加了新的特性,可以自动化创建类型擦除包装类型的过程,也可以通过使协议也被用作适当的(例如能够定义像Request这样的协议)...什么样的类型擦除是最合适的——无论是现在还是将来——当然很大程度上取决于上下文,以及我们的功能是否可以闭包中轻松地执行,或者完整包装器类型是否更适合这个问题。 感谢阅读!? ?

    1.6K20

    WWV 2018年十大必看视频

    5)Swift - 406 ? Swift Generics WWDC 2018 [视频链接] 本次会议重点关注Swift。以前的会议部分涵盖了部分,但这里有更深入的细节。...Swift已经发展了多年,现在很快就会出现在Swift 5.0中的ABI稳定性。随着时间的推移,已经得到了改进,Swift 4.2标志着一个重要的观点。...最近,该语言已获得条件一致性和递归协议约束。 这些会议涵盖了为什么需要,并从头开始构建Swift通用系统。由于不断铸造,无类型存储具有挑战性并且容易出错。允许开发人员知道它将包含哪种类型。...利用类型可以使Swift使用参数多态 - 这是的另一个名称。 设计协议是检查Swift的好方法。该演讲涵盖了如何使用类型统一具体类型。...占位符类型或关联类型是一种占位符,用于在运行时传入的具体类型。谈话涵盖了的一些强大机会。 本演讲的第二部分介绍了条件一致性和协议继承,以及带有的类。在演讲中,他们查看了一个集合协议来扩展功能。

    2.8K20

    Swift 中的类型占位符

    然而,这样做会给我们带来以下编译器错误: // Error: "Generic parameter 'Failure' could not be inferred" // Error: “无法被推断出的...>(0) 不过从 Swift 5.6 开始,这种情况就不存在了——因为我们现在可以使用一个类型占位符来表示我们主体的Output类型,这让我们再次利用编译器我们自动推断出该类型,就像在声明一个普通的Int...,需要更新的手动类型注释减少。...CurrentValueSubject 有了上述内容,我们现在就可以没有任何注解的情况下创建我们的pdfSubject了——因为编译器能够推断出T指的是什么类型,而且失败类型...译自 John Sundell 的 Type placeholders in Swift 译注: 幻象类型(Phantom Types) 技术,该技术类型用作编译器的“标记”,从而能够通过约束来强制类型安全

    1.5K30

    Swift 风味各异的类型擦除

    ——使得编译器可以保证所有关联的类型类型对齐,从而使我们可以请求存储独立的引用并作为数组的一部分——像这样: class RequestQueue<Response, Error: Swift.Error...有关线程安全的更多信息,请查看“避免Swift 中竞争条件”。 上面的方法效果很好,但有一些缺点。我们不仅引入了新的AnyRequest类型,还需要将RequestQueue转换为。...使用闭包擦除类型时,其思想是捕获闭包内部执行操作所需的所有类型信息,并使该闭包仅接受非(甚至是Void)输入。...未来,我们可能还会看到 Swift 中添加了新的特性,可以自动化创建类型擦除包装类型的过程,也可以通过使协议也被用作适当的(例如能够定义像Request这样的协议)...什么样的类型擦除是最合适的——无论是现在还是将来——当然很大程度上取决于上下文,以及我们的功能是否可以闭包中轻松地执行,或者完整包装器类型是否更适合这个问题。

    90820

    WWDC 2018年十大视频评论

    5)Swift Generics - 406 ? Swift Generics WWDC 2018 [视频链接] 本次会议重点关注Swift。以前的会议部分涵盖了仿制药,但这里有更深入的细节。...Swift已经发展了多年,现在很快就会出现在Swift 5.0中的ABI稳定性。随着时间的推移,已经得到了改进,Swift 4.2标志着一个重要的观点。...最近,该语言已获得条件一致性和递归协议约束。 这些会议涵盖了为什么需要,并从头开始构建Swift通用系统。由于不断铸造,无类型存储具有挑战性并且容易出错。允许开发人员知道它将包含哪种类型。...利用类型可以使Swift使用参数多态 - 这是的另一个名称。 设计协议是检查Swift的好方法。该演讲涵盖了如何使用类型统一具体类型。...占位符类型或关联类型是一种占位符,用于在运行时传入的具体类型。谈话涵盖了的一些强大机会。 本演讲的第二部分介绍了条件一致性和协议继承,以及带有的类。在演讲中,他们查看了一个集合协议来扩展功能。

    3.3K20

    Swift专题讲解二十二——

    Swift专题讲解二十二—— 一、以参数的函数         Swift语言强大的核心,是对类型的抽象,使用开发者可以更加灵活方便的表达代码意图。...二、类型中的应用         除了可以作为函数的参数、返回值外,定义类型时,灵活应用也可以解决很多十分棘手的问题,例如实现一个栈结构的集合类型,示例代码如下: struct Stack...items } }         有时候,开发者需要对进行一些约束,例如只允许此是继承自某个类或者实现了某个协议,示例代码如下: class MyClass { } //只有...,可以使用另一种方式来进行编程,使用associatedtype关键字可以进行类型关联,示例如下: protocol MyProtocol { //实现协议时才指定类型 associatedtype...中的ItemTypeInt var param: Int = 0 } 三、与where子句的结合使用         使用where子句可以对进行更加严格约束,使其符合开发者需要的逻辑

    29210

    Swift 周报 第十期

    最近的提议使存在类型更加明确[6],以帮助开发人员理解这种动态性质,并通过消除一些限制使存在类型更具表现力[7]。但是存在类型中的基本类型仍然存在,一旦你有一个存在类型的值,你就很难对其使用。...为了避免这种情况,该提案要求调用中显式地作为任何 P 类型注释,其中当前可以表达的返回类型丢弃对被类型擦除的原始关联类型约束,如提案中的示例所示: protocol P { associatedtype...与一样,它们使函数能够获取和返回多种可能的类型。与参数类型不同,存在类型作为输入传递给函数时不需要预先知道。此外,当从函数返回时,可以删除具体类型(隐藏在协议接口后面)。...在这个领域出现了一系列活动,SE-0309[9] 解除了对使用具有关联类型的协议作为存在类型的剩余限制,而 SE-0346[10] 关联类型协议的轻量级约束语法铺平了道路。...这些改进已经背后为 Swift 6 语言模式的 Swift 编译器中实现,但他们对于开发者是无法访问的,并将持续直到 Swift 6 作为一个可获得的语言模式。

    2.2K00

    Why Swift? Generics(), Collection(集合类型), POP(协议式编程), Memory Management(内存管理)

    这段时间几个项目都用到 Swift,在上次 GIAC 大会上就被问到为什么要用 Swift,正好这个主题可以聊聊 Swift 的哪些特性吸引了我。 先来个例子看下是解决什么问题的。... showNations 的入参数组以支持多类型,比如 [int],[double] 等。...关联类型 协议里定义的关联类型也可以用来处理。...意思是 HTNState 协议只能作为约束来用,因为它里面包含必需的 self 或者关联类型。 那么该如何处理呢?这里需要通过类型擦除来解决,主要思路就是加个中间层代码中让这个抽象的类型具体化。...where 语句是对应用时的一种约束

    1.2K20

    窥探Swift之使用Web浏览器编译Swift代码以及Swift中的

    Swift中也是支持的,许多现代编程语言,如C++, Java, C#也都是支持的。,从表面的名字来看,就是宽泛的数据类型。使用定义的方法,类,结构体,协议等可以支持不同的数据类型。...该函数中只用到了一个MyCustomeType,也就是下方的函数还是有一定约束性,就是number1和number2的类型都是相同数据类型的,这种情况也是单一占位符型函数。 ?     ...也许说起来有些拗口,接下来就来个实例函数中使用多个占位符。具体实例如下所示。本质上允许占位符中添加多个类型变量。...类中使用,其实和函数中使用是一样的。就是声明类的时候,使用占位符表示一个要处理的即可。下方就是一个类,其中有个类型数组,还有一个打印该数组的方法,如下所示: ?     ...上面是类的定义与使用,还可以应用于结构体,协议,延展等,其使用方法和类是差不多的,要学会举一反三。本篇博客中就不对结构体,协议,延展,以及约束做过多的赘述了。

    1.4K50
    领券