首页 > 解决方案 > 打字稿:类不从接口继承类型?

问题描述

我想在客户端和服务器之间共享一些端点类型:

type EndpointParams = {
    '/user': { userId: number },
    '/post': { postId: number },
};

在服务器上,我想定义端点控制器:

interface Endpoint<T extends keyof EndpointParams> {
    path: T;
    handleRequest(params: EndpointParams[T]): void;
}

class UserEndpoint implements Endpoint<'/user'> {
    path = '/user' as const;

    handleRequest({ userId }) {}
}

但是,我得到Binding element 'userId' implicitly has an 'any' type.. 为什么 TS 不自动找出那userId是一个数字?它不应该从界面中获取吗?

TS Playground: https://www.typescriptlang.org/play?#code/C4TwDgpgBAogdgEzAewJZ2ABQIYCdsC2AzlALxQDeAUFLVAOQD0ArkRLvQFyVSvsCSCbnGYEARuygBfADQ06TFEWBceS4IOGiJuaXKkBuKlXTB2AM2wBjaACFsbeEjQYAPABUoEAB5nEJAGsIEGRzWEQUUxx8YgA+SnlaMGxgAAtudyM6KFTsRAAbCAAlCABHZghlAApkmKJuJ0iMaMIiAG13AF0ASm4ANzQEIyljK3yHEgBVNlxGl2AoVAIwQoIIDBJ7Rwj51yY+DnjqbOS0sgYWGfooBygrZDhlI0ScvIRCkvLK4CqKXhnBNJupQRlIgA

其他一些相关问题:

  1. 可以省略as const吗?没有它,我得到Type 'string' is not assignable to type '"/user"'.
  2. 是否可以像函数一样推断泛型参数?
  3. 可以做path静态吗?AFAIK 接口不支持静态。

标签: javascripttypescriptinheritance

解决方案


推荐阅读