TypeScript允许您将参数约束为某种类型的键。
function foo<T>(obj: T, property: keyof T){ ... }
foo('hello world', 'length'); //Valid
foo('hello world', 'bar'); //Not Valid
我知道TypeScript中的泛型约束已经变得非常强大;有没有一种方法可以约束参数不仅是T的键,而且是T键外的任何有效表达式?
举个例子:
function foo<T>(obj: T, property: MythicalConstraintHere){ ... }
foo({dog: { cat: 'hello world' } }, 'dog'); //Valid
foo({dog: { cat: 'hello world' } }, 'bar'); //Not Valid
foo({dog: { cat: 'hello world' } }, 'dog.cat'); //Valid
这里的用例是能够有一个用于绑定表达式的约束。
发布于 2018-03-10 20:57:34
可能不完全是你想要的,但是你可以这样做:
function foo<T>(obj: T, property1: keyof T, property2?: keyof T[keyof T]) {
// ...
}
foo({dog: { cat: 'hello world' } }, 'dog'); // Valid
foo({dog: { cat: 'hello world' } }, 'dog', 'cat'); // Valid
foo({dog: { cat: 'hello world' } }, 'cat'); // Not Valid
foo({dog: { cat: 'hello world' } }, 'dog', 'pig'); // Not Valid
StackBlitz Demo (编辑器本身足以看到哪些是有效的,哪些是无效的)
https://stackoverflow.com/questions/49213142
复制相似问题