作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有数组对象,其中每个数组都是对 [value, function]
,其中 function
在参数中接受 value
:
const items = {
first: ['a', val => val.length], // val should be string
second: [[1, 2], val => val.push(3)] // val should be number[]
}
type Items = {
[key: string]: any extends [infer Value, any] ? [Value, (val: Value) => any] : never
}
const items: Items = {
first: ['a', val => val.length], // val should be string, but is unknown
second: [[1, 2], val => val.push(3)] // val should by number[], but is unknown
}
最佳答案
这是 hinosxz 的答案( Playground )的一个更安全的替代方案:
type Items = {
[K: string]: Item<any, unknown>
}
type Item<T, U> = [T, (t: T) => U]
const item = <T, U>(...args: Item<T, U>) => args // factory fn
const items: Items = {
first: item('a', val => val.length), // works
second: item([1, 2], val => val.push(3)), // works
third: item({}, val => val.length), // error (good)
fourth: item({ 0: 1 }, val => val.push(3)) // error (good)
}
Items
基类型并使用
Item
类型和
item
工厂函数单独检查所有属性,如上所示。
third
和
fourth
wouldn't trigger an error。
关于基于第一项数组的值的数组第二项的 typescript 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60898945/
如何计算 json feed 中的项目数量? 缩写的 json 格式... { "rlm1":[...], "rlm2":[...], "rlm3":[...], "r
我是一名优秀的程序员,十分优秀!