相关平台
微信小程序
小程序基础库: 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
2条答案
按热度按时间taor4pac1#
export const test = () => { return ( <View className = "abc" ooo = "aaa"> test </View> ); };
补充一下,比如说建立一个tsx文件,使用上面这样简单的程序,View中用了不存在的ooo属性,ts没有报错,按道理应该要报错的。
不管内置组件还是自己写的组件,现在都是这个情况。
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=[];