[英]JSDoc: how to define a type that's equal to object's property names- like Typescript's keyof?
[英]How to define return type using keyof accessor with TypeScript?
是否可以创建一个使用keyof
访问对象属性并让TypeScript推断返回值的函数?
interface Example {
name: string;
handles: number;
}
function get(n: keyof Example) {
const x: Example = {name: 'House', handles: 8};
return x[n];
}
function put(value: string) {
}
put(get("name"));
// ^^^ Error: Argument of type 'string | number' is not assignable to parameter of type 'string'
TypeScript 将所有允许的类型合并在一起,但是当使用值"name"
调用函数时,不会推断类型为string
。
我可以通过强制类型解决问题。
put(get("name") as string);
有没有办法做到这一点而无需铸造?
当然,您只需要使get
通用 ,就不会返回所有可能的输出类型的并集:
function get<K extends keyof Example>(n: K) {
const x: Example = { name: "House", handles: 8 };
return x[n];
}
现在推断签名为:
// function get<K extends "name" | "handles">(n: K): Example[K]
返回类型Example[K]
是一个查找类型,表示当您使用键K
索引到Example
时所获得的类型。
调用它时,如果可以将K
推断为字符串文字类型:
get("name"); // function get<"name">(n: "name"): string
并且Example["name"]
等效于string
。 因此,您的呼叫现在可以按需工作了:
put(get("name")); // okay
希望能有所帮助。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.