types 相关问题

类型和类型系统用于强制程序中的抽象级别。

为什么我需要在详尽的 switch 表达式中显式向下转型?

这里有一些我觉得很有趣的 dart 代码: 无效主(){ var someA = B(); 一个值 = switch (someA) { B() => B(), C() => C(), }; } A级密封 这里有一些我觉得很有趣的 dart 代码: void main() { var someA = B(); A value = switch (someA) { B() => B(), C() => C(), }; } sealed class A<T extends num> {} final class B extends A<int> {} final class C extends A<double> {} 如果您尝试编译它,您会收到有关 switch 语句的错误:A value of type 'Object' can't be assigned to a variable of type 'A<num>'. Try changing the type of the variable, or casting the right-hand type to 'A<num>'. 我的问题是,为什么编译器不推断两者之间的公共父类型? (好吧,我猜想……默认为 Object。)如果你写了类似 var myThing = true ? 1.5 : 7; 的内容,dart 会将 myThing 的预期类型推断为 num。为什么这里不这样做? 当然,一旦你这样做了,这一切就都解决了 void main() { var someA = B(); A value = switch (someA) { B() => B() as A, C() => C() as A, }; } sealed class A<T extends num> {} final class B extends A<int> {} final class C extends A<double> {} 相反。另外,值得注意的是,当类型参数 <T extends num> 不存在时,这个问题就不会出现——所以泛型类型的一些东西会阻止编译器推断预期的类型(或者至少是我预期的类型)。 另一方面,这个稍作修改的版本可以按预期工作,无需进行转换(Dart 版本 3.3.0): import 'dart:math'; sealed class A<T extends num> {} final class B extends A<int> {} final class C extends A<double> {} void main() { var rand = Random(); var someA = B(); var value = switch (someA) { B() => B(), C() => C(), // Dead code (message from the static analyzer). }; print(value); print(value.runtimeType); var myThing = rand.nextDouble() > 0.5 ? 1.2: 1; print(myThing.runtimeType); } 另请注意,myThing 可以推断为 int 或 double。 $ dart main Instance of 'B' B int

回答 1 投票 0

“一体式”是什么意思?

Raymond Chen 在他的博文中说道, 整数类型 WPARAM、LPARAM 和 LRESULT 在 32 位系统上为 32 位宽,在 64 位系统上为 64 位宽。当 32 位进程发送

回答 3 投票 0

TypeScript 在构造函数上键入以在扩展类中引用自身

这可行,但我想知道是否有更好的方法让构造函数知道我们想要一个 UserEntity 又名 typeof this 类 BaseEntity { 构造函数(数据:){ 对象。

回答 1 投票 0

在不执行查询的情况下获取Postgres查询结果的类型

给定一个正在运行的 Postgres 集群,如何获取任意查询结果的列的类型名称数组?我宁愿避免执行查询,因为查询可能是准备好的意思......

回答 2 投票 0

在 Code::Blocks 上无法识别 MinGW 中的 long long 、 long double

我对 C 语言编程相当陌生。我正在使用 MinGW (GCC) 来起诉 Code::Blocks 20.03,它是 CB 安装的默认部分。我尝试了几次声明和使用 long long int 与 %Ld...

回答 1 投票 0

给定回溯,如何知道要捕获哪种异常类型?

一般异常捕获器会记录以下异常: 回溯(最近一次调用最后一次): 文件“4sq.py”,第 37 行,位于 签入 = client.checkins() 文件“/usr/...

回答 2 投票 0

如何知道Python中要捕获哪种异常类型?

一般异常捕获器会记录以下异常: 回溯(最近一次调用最后一次):文件“4sq.py”,第 37 行,位于 checkin = client.checkins() 文件“/usr/...

回答 2 投票 0

如何将 UTType 与 UIdocumentPicker 一起使用(页面?docx?)

我正在尝试打开仅允许某些文件类型的选择器。 我正在使用此文档来查找我需要的 UTTYpe: https://developer.apple.com/documentation/uniformtypeidentifiers/uttype/

回答 2 投票 0

对象是C#中的原始数据类型吗?

在一些书中我发现object(默认值为null)是C#中的原始数据类型,但其他人说它不是这样。真相到底是什么?

回答 1 投票 0

如何在 Typescript 中的嵌套对象内使用类型映射?

首先,创建一个类型,将枚举键与类型相关联: 枚举 MyEnum { A, 乙 } 类型类型映射 = { [MyEnum.A]:字符串, [MyEnum.B]:数字 } 接口 ObjInterface 首先,创建一个类型,将枚举键与类型相关联: enum MyEnum { A, B } type TypeMap = { [MyEnum.A]:string, [MyEnum.B]:number } interface ObjInterface<T extends keyof TypeMap> { obj: T, objData: TypeMap[T] } interface SecondaryInterface { value: string, objChosen: ObjInterface<keyof TypeMap> } 然后创建一个对象,其中 objData 的类型根据 TypeMap 进行验证: myObj:SecondaryInterface = {value:"", objChosen:{obj:MyEnum.A, objData:"a string"}} 这部分有效,但是当我输入 objData 时,它给出了联合类型提示 'string |数字”而不仅仅是“字符串”,因为它从 keyof TypeMap 推断类型而不是确切的 TypeMap[T]。 是否有可能获得所使用的枚举键及其在类型映射中设置的关联类型的精确类型匹配? 它可以使用类型断言来工作,但是可以在没有类型断言的情况下工作吗?: myObj:SecondaryInterface = {value:"", objChosen:<ObjInterface<MyEnum.A>>{obj:MyEnum.A, objData:"a string"}} 根据您的定义,ObjInterface<MyEnum.A | MyEnum.B>是单个对象类型,其中obj可以是任何MyEnum,objData可以是string | number。但这不是你想要的。您希望 ObjInterface<T> distribute over T 中的 unions,以便 ObjInterface<MyEnum.A | MyEnum.B> 被评估为 ObjInterface<MyEnum.A> | ObjInterface<MyEnum.B>。有不同的方法可以实现这一点,例如使用分布式条件类型,但是当您想要分配的东西类似于键时,我通常更喜欢编写分布式对象类型,如microsoft/TypeScript#47109中所创造的那样。这就是您索引到映射类型的地方。 如果您有一个类似键的类型 K,并且想要将类型函数 F<K> 分布在 K 中的联合上,那么您可以编写 {[P in K]: F<P>}[K]。这会变成一种映射类型,其中 K 的每个成员都有一个属性,该映射类型会立即使用 K 进行索引以形成这些属性的并集。 对于您的代码,如下所示: type ObjInterface<K extends keyof TypeMap> = { [P in K]: { obj: P, objData: TypeMap[P] } }[K] 然后 ObjInterface<keyof TypeMap> 计算为 /* type ObjInterface<keyof TypeMap> = { obj: MyEnum.A; objData: string; } | { obj: MyEnum.B; objData: number; } */ 这不再是严格意义上的 interface,所以也许应该更改名称。 当然,此时您实际上还没有说明为什么需要 ObjInterface 继续保持 通用,如果您关心的只是插入 keyof TypeMap 的话。如果您不需要通用的,您可以将 K 硬编码为 keyof TypeMap 并制作它 type ObjInterface = { [K in keyof TypeMap]: { obj: K, objData: TypeMap[K] } }[keyof TypeMap] 然后剩下的代码是 interface SecondaryInterface { value: string, objChosen: ObjInterface } const myObj: SecondaryInterface = { value: "", objChosen: { obj: MyEnum.A, objData: "a string" } }; // okay myObj.objChosen = { obj: MyEnum.B, objData: 123 }; // okay myObj.objChosen = { obj: MyEnum.A, objData: 123 }; // error 随心所欲。 Playground 代码链接

回答 1 投票 0

TypeScript 与字符串文字模板的结果类型匹配

我有类型: 输入 To_String = `${N}` 我创建映射结果字符串编号的类型: 类型重新映射 = 数字扩展“0” ? '为零' :号码延长...

回答 1 投票 0

具有完整类型推断(没有类型注释)的语言是否需要类型检查?

我是类型系统和类型推断的新手。我的目标是为没有类型的 OOP 语言实现静态类型系统和类型推断算法(最接近的例子是没有动态特性的 JS ...

回答 1 投票 0

只有“void”是不可引用类型吗?

#包括 使用 std::cout; 使用 std::endl; 使用 std::boolalpha ; 使用 std::add_rvalue_reference_t ; 使用 std::is_reference_v; int 主函数(无效){ 计算<< boolalpha <<

回答 1 投票 0

从 .txt 文件读取列表并引用条目

我是编程新手,正在尝试使用 python 编写纸牌游戏。 我有一些问题: 我正在从 .txt 文件中读取牌组列表,如下所示: 2、卡001,1 2、卡002,2 2、卡003,3 我正在尝试...

回答 1 投票 0

为什么关键属性没有被识别为打字稿中事件类型的一部分

我有一个函数可以使用事件找出用户按下的按钮,并使用 event.key 属性。但是,在函数的参数中,如果我为其分配类型 Event,编译器将...

回答 3 投票 0

闭包 |a: i32, b: i32| 的类型是什么? {a + b}?

我尝试输入 vscode 显示的闭包类型定义内容,但这是错误的。我应该用什么来代替? 我的代码: 让 x = |a: i32, b: i32| {a+b}; Rust 分析仪扩展: 让 x: imp...

回答 1 投票 0

理解 TypeScript 条件类型(是否可以创建 Integer 类型?)

我最近一直在使用 TypeScript 开发一个项目,并且像我之前的许多开发人员一样,遇到了一个场景,我确定拥有一个 Integer 类型会很有用,它会抛出一个 e...

回答 1 投票 0

TypeScript 中扩展接口和相交接口之间的区别?

假设定义了以下类型: 界面形状{ 颜色: 字符串; } 现在,考虑以下方法来向此类型添加其他属性: 扩大 界面 Square 延伸 Shap...

回答 2 投票 0

Any 与 Forall a.a 相同吗?

Python 具有与任何类型“一致”的 Any 类型。是不是可以使用 Forall a.a 来表达 Any 并且不添加新类型?

回答 1 投票 0

Swift 中不同类型到 CustomDebugStringConvertible 的转换

我不明白什么时候向上转换到 CustomDebugStringConvertible 会成功。在以下示例中,errorClass 和 myEnum 无法编译。但失败的原因是什么?为什么另外两个(

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.