首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript编译器为Reselect.createSelector()生成错误的返回类型

Typescript编译器为Reselect.createSelector()生成错误的返回类型
EN

Stack Overflow用户
提问于 2016-10-24 05:34:53
回答 1查看 1.2K关注 0票数 0

据我所知,用于重新选择(https://github.com/reactjs/reselect)的.d.ts文件是正确的。所以这里发生了什么.这是Typescript编译器的问题吗?我的tsconfig?

要重现该问题,请执行以下操作:

Demo.ts

代码语言:javascript
复制
import { createSelector, Selector } from 'reselect';

export interface DemoState {
    values: {
        value1: number,
        value2: number
    },
}

export const selectTotal = createSelector<DemoState, number, number, number>(
    state => state.values.value1,
    state => state.values.value2,
    (value1, value2) => {
        return value1 + value2;
    }
);

从reselect.d.ts可以看出,上面的createSelector()应该返回类型Selector<DemoState, number>

reselect.d.ts

代码语言:javascript
复制
function createSelector<TInput, TOutput, T1, T2>(selector1: Selector<TInput, T1>, selector2: Selector<TInput, T2>, combiner: (arg1: T1, arg2: T2) => TOutput): Selector<TInput, TOutput>;

type Selector<TInput, TOutput> = (state: TInput, props?: any) => TOutput;

但是,typescript编译器为定义实际生成的是:

Demo.d.ts

代码语言:javascript
复制
export declare const selectTotal: Selector<DemoState, number, number, number>;

苏。当我在另一个项目中导入选择器时,我得到了这样的错误:“泛型‘selectTotal’需要2个类型参数。”因为reselect.d.ts只定义了Selector<TInput, TOutput>,而且据我所知,这就是createSelector应该返回的内容,而不管传入的类型参数有多少。

获得正确定义的唯一方法是显式转换createSelector结果,但我不认为我应该这样做。

代码语言:javascript
复制
export const selectTotal = createSelector<DemoState, number, number, number>(
state => state.values.value1,
state => state.values.value2,
(value1, value2) => {
    return value1 + value2;
}) as Selector<DemoState, number>;

使用TypeScript 2.0.3,以及我的tsconfig,以防相关:

代码语言:javascript
复制
{
  "compileOnSave": true,
  "compilerOptions": {
    "rootDir": "./src",
    "outDir": "./dist",
    "declaration": true,
    "sourceMap": true,
    "target": "es6",
    "module": "es6",
    "moduleResolution": "node",
    "jsx": "preserve",
    "allowSyntheticDefaultImports": true,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true,
    "removeComments": false,
    "preserveConstEnums": true
  },
  "exclude": [
    "node_modules",
    "dist"
  ]
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-19 23:37:27

原来这是TypeScript 2.0.3编译器的一个问题。升级到2.0.6+可以解决此问题。

https://github.com/Microsoft/TypeScript/issues/12370

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40208012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档