作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在某些情况下,我想扩大按字面转换的对象的类型(使用“as const”),因此它的属性将被推断为字符串或数字,而不是字面意义。
想象一下我有以下类型
const obj = [
{
type:"student",
name:"Yossi"
},
{
type: "Teacher",
name: "Lili"
}
] as const
type Person = typeof obj [number]
我希望从字面上推断 obj 的类型,但要更广泛地推断 Person,因此它的类型和名称是字符串。是否有一个泛型可以允许以下内容:
type Person = Widen<typeof obj [number]>
最佳答案
有趣的案例。我们可以尝试通过映射类型来创建这样的实用程序。考虑:
// it transforms our specific types into primitive origins
type ToPrimitive<T> =
T extends string ? string
: T extends number ? number
: T extends boolean ? boolean
: T;
// mapped types which will preserve keys with more wide value types
type Widen<O> = {
[K in keyof O]: ToPrimitive<O[K]>
}
// using
type Person = Widen<typeof obj[number]>
const a: Person = {
name: 'name', // string
type: 'type' // string
}
我们可以延长
ToPrimitive
还可以通过添加附加条件来考虑其他类型,如对象、数组。
obj
元素类型或原始类型是一种 -
{name: string, type: string}
.然后我们可以通过以下方式从第一个元素创建一个类型:
type Person = Widen<typeof obj[0]>;
// and this nicely evaluates to:
type Person = {
readonly type: string;
readonly name: string;
}
关于typescript - 在 Typescript 中使用泛型类型加宽类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355418/
我正在研究 Java Se 7 OCA,无法弄清楚为什么下面的代码无法编译。主方法中的方法调用会给出编译错误,指出方法不明确。在此重载方法示例中,加宽和装箱之间的优先级规则似乎发生冲突。 public
如有错误,请指正。Boxing+Varargs 是否优于 Boxing+Widening? 我在site中找到了那是另一种方式。 最佳答案 当多个可以符合条件时调用什么方法在 JLS #15.2.2
当元素在屏幕上时,我试图加宽一个 div(模拟进程栏)。我不能让任何事情发生。我究竟做错了什么?我正在尝试使用: jQuery $(document).ready(function() {
我正在尝试使用自定义样式表更改垂直 QScrollBar 的宽度 QScrollBar:vertical { border: 2px solid grey; background:
我遇到了 https://code.google.com/p/hamcrest/issues/detail?id=130为 Hamcrest 匹配器添加一些语法糖。但这个想法被 Hamcrest 开发
我是一名优秀的程序员,十分优秀!