typescript - 创建引用自身的类型/接口
问题描述
这是一个简单的例子:
这是问题:
(参数)独奏:未知
function entityWrapper22<T extends { [K in keyof T]: {
keys: Array<keyof T>,
fn: (solo: T[K]['keys']) => any,
} }>(t: T) {
return t
}
const vraw = entityWrapper22({
age: {
keys: [],
fn: () => 33
},
name: {
keys: [],
fn: () => 'thomas',
},
numberString: {
keys: ['age'],
fn: (solo) => solo
},
})
更复杂的例子:
我有一个函数entityWrapper
,我正在尝试键入它,以便get.every
使用同名属性的返回值键入函数( 的第二个参数)。
例如,{ name }
应该是类型string
,甚至是thomas
因为它的推断类型。
const raw = entityWrapper({
age: get.every([], () => 33),
name: get.every([], () => 'thomas'),
numberString: get.every(['name'], ({ name }) => '212'),
})
我已经创建了两次尝试来创建引用本身都不能按预期工作的类型
我这里有一个例子,它是一个type
.
type EntityItem<T extends any> = {
[K in keyof T]: {
keys: Array<keyof T>,
some?: Function,
first?: Function
every?: (solo: MapReturnTypesArray<T, T[K]['keys']>) => any,
}
}
另一个在这里使用interface
.
interface Entity<T extends Entity<T>> {
[key: string]: Item<T>
}
interface Item<T extends Entity<T>> {
keys: Array<keyof T>,
some?: Function,
first?: Function
every?: (solo: MapReturnTypesArray<T, this['keys']>) => any,
}
这两个似乎都无法正常工作,并将密钥注册为never[]
每个。
对于更多上下文get.every
,所做的就是将道具分配给一个对象。
const get = {
every: <A, B> (keys: A, every: B) => ({ keys, every }),
some: <A, B> (keys: A, some: B) => ({ keys, some }),
first: <A, B> (keys: A, first: B) => ({ keys, first }),
}
错误是:
类型“MapReturnTypesArray”上不存在属性“名称”
解决方案
推荐阅读
- python-3.x - Numpy函数找到最小化函数的最佳候选者
- r - 使用 R,如何使用 if 创建新列?
- c - 如果在程序中输入第三个数字,则结束交换程序并显示错误消息。(C)
- node.js - 找到技能最多的候选人
- c# - 使用 C# 在数据表值之间进行组合
- android - 服务在启动时启动并且在 Activity onDestroy() 之后不会被终止
- php - is_page() 在 functions.php 文件中不起作用
- sql - SQL 内连接 2 次
- google-cloud-platform - 为 Google AI Platform 推理找到正确的 JSON 格式
- react-native - React 原生动画液体流体菜单