gpt4 book ai didi

javascript - 解构赋值时类型上不存在属性,Typescript 中出现 'Pick'

转载 作者:行者123 更新时间:2023-12-02 21:34:58 26 4
gpt4 key购买 nike

我想使用模型中定义的接口(interface)作为函数的参数。

// model/interface.ts
import { Document } from 'mongoose';

export interface Post extends Document {
location: {
type: string;
coordinates: number[];
};
};

// service/post_create.ts
import { Post } from '../../model/interface/post';

const exec = async (location: Pick<Post, 'location'>) => {
const { coordinates: [x, y] } = location;
// -> Property 'coordinates' does not exists on type 'Pick<Post, 'location'>'
}

我已经通过 Pick 指定了一个类型,我已导入该类型以将接口(interface)用作函数参数,但我实际上无法在函数内找到名为“坐标”的属性。

我犯了什么错误?

最佳答案

Pick utility type用于“过滤”对象类型的键,因此如果您说

type X = Pick<Post, 'location'>
/*
It means:
X = {
location: {
type: string;
coordinates: number[];
};
}
*/

正如您所看到的,我们的对象类型仅具有选定的属性,在您的示例中,我们选择了一个 - location。但这意味着 location 是该对象中的一个属性,为了访问它,您需要说 location.location

<小时/>

看看您的用例,我认为您想要获取 location 属性的类型,而不是过滤对象。获取属性类型可以通过 indexed types 来完成。考虑:

const exec = async (location: Post['location']) => {
const { coordinates: [x, y] } = location; // works
}

Post['location'] 采用 Post 类型的 location 属性的类型。

关于javascript - 解构赋值时类型上不存在属性,Typescript 中出现 'Pick',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60522788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com