我正在尝试输入自定义 React hook:
import { useRef } from 'react';
type Reference = [
Promise<unknown>,
(value?: unknown) => void,
(reason?: unknown) => void,
];
const usePromise = () => {
const reference: Reference = [];
const container = useRef(reference);
reference[0] = new Promise((resolve, reject) => {
reference[1] = resolve;
reference[2] = reject;
});
// [promise, resolve, reject]
return container.current;
};
export default usePromise;
TypeScript 提示 reference
说:
Type '[]' is not assignable to type 'Reference'.
Source has 0 element(s) but target requires 3.
如何让 TypeScript 也接受空数组/元组初始化?也许还有一种方法可以给 usePromise
值的类型,这样它就不会说 unknown
?
最佳答案
编辑2:
如果要将元组初始化为空数组,可以这样做:
const reference : [Reference, Reference, Reference] = ([] as unknown) as [Reference, Reference, Reference];
编辑:根据OP的评论进行编辑
如果你想使用元组,你需要这样做: 请阅读下面的内嵌评论。
type Reference = {
name: string;
age: number;
}
//In your case, it should be something like this beause your tuple may have upto 3 values of type Reference.
//initialization
//null! - the '!' mark after null is the non-null assertion operator, which will let you assign null value to a type Reference.
const reference2: [Reference, Reference, Reference] = [null!, null!, null!];
//assignment
reference2[0] = {name: 'John', age:10};
原始答案:
这是因为您声明了一个 const 变量 reference
,其类型为 Reference
(称为 Reference
的类、类型或接口(interface)的对象实例)并且但用空数组[]
初始化它。
如果您希望 reference
有一个 Reference
对象数组,那么您应该这样做:
const reference: Reference[] = [];
如果您在 tsconfig 中启用了严格的类型检查,则应该这样做:
const reference: Reference[] = [] as Reference[];
您可以在此处阅读有关 as
关键字的信息:Stack Overflow question about the 'as' keyword
关于arrays - TypeScript:输入带有值或空的数组/元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65204760/