2017-02-09 38 views
0

我有以下代码:在TypeScript中,如何使用索引类型查询运算符来获取类型属性的子集?

var o = { x: 5, y: 6, z: 'hi' } 
type OnlyNumberProps = keyof typeof o; // 'x' | 'y' | 'z' I want it somehow to be 'x' | 'y' 
var p : OnlyNumberProps = 'z' // How to get error here ? 
var z : OnlyNumberProps = 'x' // And OK here ? 

如何过滤类型OnlyNumberProps只包含对象o的数量属性的名称?

+0

如果'x'和'z'都是'OnlyNumberProps'的元素,为什么你会期望在一种情况下出现错误而在另一种情况下没有错误?我没有得到你想要做的 – robkuz

+0

我想要得到的类型OnlyNumberProps ='x'| 'y',即只具有那些属于o的属性,其类型为'number' –

+0

@MadaraUchiha可能如何?你是基于现有问题吗? –

回答

2

这是不可能的。

你可以开始使用mapped types最接近的是这样的:

var o = { x: 5, y: 6, z: 'hi' } 
type TypeOfO = typeof o; 

type OnlyNumber = { 
    [P in keyof TypeOfO]: number; 
} 

但随后OnlyNumber将是:

type OnlyNumbers = { x: number; y: number; z: number; } 

这是不是你要找的东西。
无法过滤密钥。

相关问题