typescript - 打字稿推断一个属性的键并在另一个属性中使用它们
问题描述
如何推断属性“objects”的对象的键并将它们用作另一个属性“onObject”的函数参数中的约束?我事先不知道密钥,它们是动态定义的。
interface Foo <Objects extends {[name: string]}: Bar = {}> {
objects: Objects;
onObject(name: keyof Objects): void;
}
const foo: Foo = {
objects: {
"a": ...,
"b": ...,
},
onObject: (name: "a" | "b") => { // put constraint "a" | "b" here
...
}
}
解决方案
Typescript 不会推断变量的类型参数,但是您可以使用函数来获得所需的推断行为:
function makeFoo<T extends { [name: string]: any }>(o: Foo<T>) {
}
interface Foo<Objects extends { [name: string]: any } = {} > {
objects: Objects;
onObject(name: keyof Objects): void;
}
const foo = makeFoo({
objects: {
"a": 0,
"b": "...",
},
onObject: (name) => { // name: "a" | "b"
}
})
推荐阅读
- css - 平滑的 CSS 动画向上滚动?
- java - java 1.6中的字符串操作
- javascript - 以特定方式格式化电话号码?
- code-generation - Telosys - 如何在当前项目位置之外生成文件?
- jquery - Jquery Bargraph没有正确加载
- javascript - react-native 出现奇怪的 StyleSheet 错误
- node.js - NodeJS express passport-ldapauth 总是返回“无效的用户名/密码”
- ddev - 如何在 ddev 上启用 Apache 模块?
- xdotool - xdotool 中的 POS1 键的名称是什么?
- javascript - 将 JSON 从 SQL Server 传递到 D3 Javascript