【发布时间】:2022-01-11 16:00:46
【问题描述】:
根据Typescript,这段代码有如下问题:Argument of type 'number' is not assignable to parameter of type 'SetStateAction<T>'.ts(2345)。
使用类型或类型联合代替泛型的类似版本将起作用(实际上,可能会建议使用具有所有预期类型的联合)。
不过,如果我想坚持使用泛型,我将如何修改此代码以使其被接受?
import React, { Dispatch, SetStateAction, useState } from 'react';
function useValue<T>(init: T) {
return useState<T>(init);
}
function SpecialButton<T>({
value,
setValue,
}: {
value: T;
setValue: Dispatch<SetStateAction<T>>;
}) {
switch (typeof value) {
case 'number':
return <button onClick={() => setValue(value + 1)}>Add 1 to {value}</button>;
default:
return <div>UNSUPPORTED</div>;
}
}
function App() {
const [value, setValue] = useValue<number>(0);
return <SpecialButton value={value} setValue={setValue} />;
}
(另外,我注意到在类型等于数字的情况下,值将被转换为T | number,但我不知道如何利用它)。
【问题讨论】:
标签: reactjs typescript generics typescript-generics react-typescript