taro 3.6.23 type script 5.3.3简单程序报错

m528fe3b  于 4个月前  发布在  其他
关注(0)|答案(2)|浏览(39)

相关平台

微信小程序

小程序基础库: 3.3.4
使用框架: React

复现步骤

安装了taro 3.6.23 ts环境之后,使用下面简单的程序就报错:

interface Obj1 {
key1: number;
key2: number;
}

interface Obj2 {
key3: number;
key4: number;
}

interface NewObj extends Pick<Obj1, 'key1'>, Pick<Obj2, 'key3'> {

}

let obj: NewObj = {
key1: 5,
key3: 8,
};

错误信息如下:

Initializer type {key1: number, key3: number} is not assignable to variable type NewObj

但是这个程序在纯ts环境下是正确的。
还发现taro ts 5以上的版本都有这个问题,但是taro ts 4的版本都不会这样。

这是为什么呢?

期望结果

上面的程序不应有报错

实际结果

有报错

环境信息

👽 Taro v3.6.23

  Taro CLI 3.6.23 environment info:
    System:
      OS: Windows Server 2012 6.3.9600
    Binaries:
      Node: 18.11.0 - C:\Program Files\nodejs\node.EXE
      npm: 8.19.2 - C:\Program Files\nodejs\npm.CMD
    npmPackages:
      @tarojs/cli: 3.6.23 => 3.6.23
      @tarojs/components: 3.6.23 => 3.6.23
      @tarojs/helper: 3.6.23 => 3.6.23
      @tarojs/plugin-framework-react: 3.6.23 => 3.6.23
      @tarojs/plugin-html: ^3.6.23 => 3.6.23
      @tarojs/plugin-platform-alipay: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-h5: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-jd: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-qq: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-swan: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-tt: 3.6.23 => 3.6.23
      @tarojs/plugin-platform-weapp: 3.6.23 => 3.6.23
      @tarojs/react: 3.6.23 => 3.6.23
      @tarojs/runtime: 3.6.23 => 3.6.23
      @tarojs/shared: 3.6.23 => 3.6.23
      @tarojs/taro: 3.6.23 => 3.6.23
      @tarojs/taro-loader: 3.6.23 => 3.6.23
      @tarojs/webpack5-runner: 3.6.23 => 3.6.23
      babel-preset-taro: 3.6.23 => 3.6.23
      eslint-config-taro: 3.6.23 => 3.6.23
      react: ^18.0.0 => 18.2.0
taor4pac

taor4pac1#

export const test = () => { return ( <View className = "abc" ooo = "aaa"> test </View> ); };

补充一下,比如说建立一个tsx文件,使用上面这样简单的程序,View中用了不存在的ooo属性,ts没有报错,按道理应该要报错的。
不管内置组件还是自己写的组件,现在都是这个情况。

mw3dktmi

mw3dktmi2#

export interface SelectGroupContextValueObj {
mode: SelectMode;
select: (val: SelectValue) => void;
values: string[];
}
export const SelectGroupContext = createContext<SelectGroupContextValueObj | undefined>(undefined);

有个组件使用了它:
return (
<SelectGroupContext.Provider value = {{mode, select, values: value}}> //A
{children}
</SelectGroupContext.Provider>
);
A处的value的类型是string[]|undefined,但是应该要报错,这是因为value有可能是undefined,不能赋值给values,values不接受undefined.
但是ts 5.3.3下的taro ,没有报错。

我把ts降级为4.9.5后,A处就会报错:
TS2322: Type 'string[] | undefined' is not assignable to type 'string[]'.   Type 'undefined' is not assignable to type 'string[]'.
这才是正常的。

总之ts 5+taro会有很多类型推断问题,我暂时用回ts 4.9.5,希望这些问题能解决。

上面例子可以用以下代码说明:
interface TestType {
values:string[];
}

const obj: TestType = {values: undefined}; //应报错才正确,但ts 5+taro 没有报错
obj.values=[];

相关问题