Typescript和React:使用React.Component和条件类型的props时类型推断失败

asg*_*las 5 typescript reactjs react-native

在下面的设置中,我尝试为onChange函数中的value参数获取正确的推断类型。下面的设置为我提供了一个类型值,string | number尽管我本以为应该string为该值分配一个string

import * as React from 'react'

type NumberProps = {
    decimals: number;
};

type StringProps = {};

type Props<T> = {
    value: T;
    onChange: (value: T) => void;
} & (T extends number ? NumberProps : StringProps);

class Y<T extends string | number> extends React.Component<Props<T>> {}

new Y({ value: 2.5, onChange:((value) => { /* value is inferred as string | number, but should be number */ })})
Run Code Online (Sandbox Code Playgroud)

有两点将使推断正确-但在其他方面当然也将是错误的-但可能会提供错误提示:

  1. 我可以删除“道具”类型的这一部分: & (T extends number ? NumberProps : StringProps);

  2. 我可以Y从React.Component之外的其他东西派生,例如class X<T> { constructor(props: T) {} }

我是在做/预期有什么问题,还是Typescript和/或React类型的错误。

Huy*_*yen 0

如果类型推断不起作用,您可以自己显式指定类型参数的值:

new Y<string>({ value: 'test', onChange:((value) => { /* value is now a string */ })})
Run Code Online (Sandbox Code Playgroud)

  • 正确,但这并不能回答我的问题:) (2认同)