Pau*_*l A 2 typescript svelte svelte-store
我有一个工作派生商店,名为selectedDocument in svelte。当我尝试向其中添加正确的类型时,出现以下 TS linting 错误。(并且智能感知不起作用)
Expected 2 type arguments, but got 1.ts(2558)
Run Code Online (Sandbox Code Playgroud)
Type '{ view_id: never; user_id: never; doc_id: never; user_name: never; user_avatar: never; cardMap: never; cards: never; }' must have a '[Symbol.iterator]()' method that returns an iterator.ts(2488)
Run Code Online (Sandbox Code Playgroud)
商店可以工作,类型可以与其他类似数据一起工作
export interface MainView {
view_id: string;
user_id: string;
doc_id: string;
user_name: string;
user_avatar: string;
cardMap: CardMap;
cards: {
[key: string]: Card;
};
}
export interface Document {
doc_id: string;
createDate: Date;
createdBy: string;
title: string;
}
Run Code Online (Sandbox Code Playgroud)
const userDocuments = writable<Document[]>();
const selectedDocId = writable<string>(""); // Selected doucment Id
const selectedDocument = derived<Document>(
[selectedDocId, userDocuments],
([$selectedDocId, $userDocuments]) =>
getObjByIdReturnOneObj($userDocuments, $selectedDocId, "doc_id")
);
Run Code Online (Sandbox Code Playgroud)
函数 getObjByIdReturnOneObj 接受文档数组并返回单个对象(不在数组中)
export interface MainView {
view_id: string;
user_id: string;
doc_id: string;
user_name: string;
user_avatar: string;
cardMap: CardMap;
cards: {
[key: string]: Card;
};
}
export interface Document {
doc_id: string;
createDate: Date;
createdBy: string;
title: string;
}
Run Code Online (Sandbox Code Playgroud)
const userDocuments = writable<Document[]>();
const selectedDocId = writable<string>(""); // Selected doucment Id
const selectedDocument = derived<Document>(
[selectedDocId, userDocuments],
([$selectedDocId, $userDocuments]) =>
getObjByIdReturnOneObj($userDocuments, $selectedDocId, "doc_id")
);
Run Code Online (Sandbox Code Playgroud)
函数 getObjByIdReturnOneObj 接受文档数组并返回单个对象(不在数组中)
如果您查看 的类型derived
,您会发现它有两个类型参数。这是它最简单的签名:
export declare function derived<S extends Stores, T>(
stores: S,
fn: (values: StoresValues<S>) => T
): Readable<T>;
Run Code Online (Sandbox Code Playgroud)
目前,您不能只指定某些类型参数,要么全部指定,要么全无。一般来说,当参数可以自动导出时,我建议不要指定它们;它大多只会增加不必要的噪音。
getObjByIdReturnOneObj
在这种情况下,如果您指定类型,第二个参数必须具有返回类型。
第一个还必须调整为至少包括Readable
如下Stores
定义:
declare type Stores =
Readable<any> |
[Readable<any>, ...Array<Readable<any>>] |
Array<Readable<any>>;
Run Code Online (Sandbox Code Playgroud)
设置类型时,您还可以使用typeof
从现有存储和函数派生类型:
const selectedDocument = derived<
[typeof selectedDocId, typeof userDocuments],
ReturnType<typeof getObjByIdReturnOneObj>
>(...)
Run Code Online (Sandbox Code Playgroud)
或者手动类似:
const selectedDocument = derived<
[Readable<string>, Readable<Document[]>],
Document // Based on type specified in question
>(...)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2482 次 |
最近记录: |