为什么自动完成停止在TypeScript中具有类型的对象中工作?

问题描述 投票:3回答:3

我在一个对象中有一个路由列表,并希望将其导入到其他文件中,并具有对象属性的自动完成功能。

index.ts

import allRoutes from './routes';

allRoutes.routeHome;

routes.ts

const allRoutes = {
  routeHome: '',
  routePortfolio: 'portfolio'
};

export default allRoutes; 

一切正常。但是如果我为我的allRoutes添加类型以进行某些类型的类型搜索:

const allRoutes: {[key: string]:string} = {
  routeHome: '',
  routePortfolio: 'portfolio'
};

或者像这样:

interface IRoutes {
    [key: string]: string;
}

const allRoutes: IRoutes = {
    routeHome: '',
    routePortfolio: 'portfolio'
};

一切都崩溃了

我在WebStorm或VSCode中尝试这个。如果我为对象属性添加一个类型 - 自动完成停止工作。为什么会这样?我怎么解决这个问题?

typescript visual-studio-code webstorm
3个回答
2
投票

使用{ [key: string]: string }类型初始化常量后,原始类型将丢失。如果要保留原始类型但检查它是否可分配给{ [key: string]: string },则可以执行以下操作:

function asStrings<T extends { [key: string]: string }>(arg: T): T {
  return arg;
}

const allRoutes = asStrings({
  routeHome: '',
  routePortfolio: 'portfolio'
});

有一个suggestion解决方案,不需要调用函数。


3
投票

记录为WEB-34642,请关注它以获取更新


0
投票

这个解决方案怎么样?

interface IRoute {
    name: string;
    destination: string;
}

class AllRoutes {
    public static readonly Home: IRoute = { name: "Home", destination: "" }; 
    public static readonly Portfolio: IRoute = { name: "Portfolio", destination: "portfolio" }; 
}
© www.soinside.com 2019 - 2024. All rights reserved.