Typescript - 如何从 promise 中强制转换对象

Typescript - How to cast an object from a promise

提问人:Don 提问时间:7/21/2023 更新时间:7/21/2023 访问量:76

问:

我正在尝试弄清楚如何从 API 调用(NextJs 13 Fetch)中投射对象。

我正在尝试使用实用程序方法中的 fetch 调用 Sanity 并将对象 (Post) 返回到页面,在那里我可以访问 Post 对象的属性。

这是我拥有的代码......

页面代码

/* Get the blog post */
const post = async () => {
    await getPost('test-post');
  };

Utility 方法

export async function getPost(slug:string): Promise <Post> {

    return SanityClient.fetch(`*[_type == "post"] | order(publish_date desc)`,)
} 

Post 对象

import { PortableTextBlockComponent } from "@portabletext/react"
import { Author } from "./Author";
import { Category } from "./Category";
import { BannerImage } from "./BannerImage";

export type Post = {
    title: string,
    headline: string,
    slug: string,
    publish_date: Date,
    banner_image: BannerImage,
    category: Category[],
    author: Author[];
    body: PortableTextBlockComponent[]
};

提前感谢您的见解。

TypeScript 承诺 转换 next.js13

评论


答:

0赞 weagle08 7/21/2023 #1

我不确定你的fetch客户端的工作原理,有几个你必须将响应解析为json,但假设你已经这样做了,那么你可以通过.因此,您从 API 调用中获得的回报变为:as unknown as [type]

Utility方法

export async function getPost(slug:string): Promise <Post> {

    return SanityClient.fetch(`*[_type == "post"] | order(publish_date desc)`,) as unknown as Post;
}

确保 TEST 验证返回的值是否为有效的 Post。

评论

0赞 Don 7/21/2023
谢谢。。。我没有解析为JSON。那会是什么样子?