我在一个对象中有一个路由列表,并希望将其导入到其他文件中,并具有对象属性的自动完成功能。
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中尝试这个。如果我为对象属性添加一个类型 - 自动完成停止工作。为什么会这样?我怎么解决这个问题?
使用{ [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解决方案,不需要调用函数。
记录为WEB-34642,请关注它以获取更新
这个解决方案怎么样?
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" };
}