作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种在不丢失推断类型信息的情况下将 TypeScript 中的文字值限制为特定类型的好方法。
让我们考虑一个类型Named
,它保证有一个名字。
type Named = {
name: string
};
使用类型注释会为用于定义常量 cat1
的文字中的额外字段 born
创建错误。
const cat1: Named = {
name: 'Findus',
born: 1984, // this is an error
};
const name1 = cat1.name;
const born1 = cat1.born; // this is an error
通过使用类型转换,我可以定义 const cat2
但它会丢失字段 born
的类型信息,这会在稍后尝试访问该字段时产生问题。
const cat2 = {
name: 'Findus',
born: 1984,
} as Named;
const name2 = cat2.name;
const born2 = cat2.born; // this is an error
解决该问题的一种方法是在定义 const cat3
时使用 IIFE 对文字进行类型检查。
const cat3 = (<C extends Named>(c: C) => c)({
name: 'Findus',
born: 1984,
});
const name3 = cat3.name;
const born3 = cat3.born;
这是执行约束的预期方式,还是有更好的替代方式来编写兼容代码?
最佳答案
简单的说你的类型是一条记录,需要一个参数name
interface Named extends Record<string, any> {
name: string
}
或者你可以使用这样的东西
type Named<T> = T & {
name: string
}
const a: Named<{ surname: string } > = {
name: 'hello',
surname: 'world'
};
关于typescript - TypeScript 中的非破坏性类型断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60298695/
我正试图让这个 map 功能成为一个更具破坏性的版本。这意味着 map 函数会修改原始数组而不是新数组。 function map (array, callback) { var result =
破坏性 Lisp 函数名称中的“N”缩写是什么词? 最佳答案 这是一个直接的答案from Linearity的 link : The N stands for non-consing, meaning
这是带有数据绑定(bind)元素的 html: div data-bind="foreach: clientRequests" id="test2">
我是一名优秀的程序员,十分优秀!