Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 修改类型以包含对象的静态值而不是其派生类型({test:3}而不是{test:number})_Typescript_Typescript Typings - Fatal编程技术网

Typescript 修改类型以包含对象的静态值而不是其派生类型({test:3}而不是{test:number})

Typescript 修改类型以包含对象的静态值而不是其派生类型({test:3}而不是{test:number}),typescript,typescript-typings,Typescript,Typescript Typings,我正在尝试创建一个调色板,我想导出一个附加了所有颜色的对象,并获取它们的键入信息。由于每个键只能是一个值,我希望它们的类型将导出为该特定值。但是,当我简单地导出颜色集时,每个关键点都会变成一个字符串(而不是特定的值) 如果我做了以下事情,我就会得到我想要的。但是,每次添加颜色时,我都必须手动添加到类型中 export const red = "#FF0000"; export const tuna = "#36393F"; type enumInterface = { tuna:

我正在尝试创建一个调色板,我想导出一个附加了所有颜色的对象,并获取它们的键入信息。由于每个键只能是一个值,我希望它们的类型将导出为该特定值。但是,当我简单地导出颜色集时,每个关键点都会变成一个字符串(而不是特定的值)

如果我做了以下事情,我就会得到我想要的。但是,每次添加颜色时,我都必须手动添加到类型中

 export const red = "#FF0000";
 export const tuna = "#36393F";

 type enumInterface = {
   tuna: typeof tuna;
   red: typeof red;
 };
 const defaultExport: enumInterface = {
   tuna,
   red
 };
 // When I import this in another file the typing information 
 // shows the hexcode instead of type string. which is what I want
 export default {
  ...defaultExport
 };
我知道映射类型,所以我希望这样做,但它不起作用,因为t[p]不是一个值,而是一个类型

type testInterface<T> = {
  [P in keyof T] : typeof T[P];
}
type testInterface={
[P in keyof T]:T的类型[P];
}

我希望有人知道如何实现与第二组相似的效果,但使用映射类型,这样我就不必键入每种类型。谢谢你的帮助

获取文本类型的最简单解决方案是只使用类型断言:

const defaultExport = {
    tuna: "#36393F" as "#36393F",
    red: "#FF0000" as "#FF0000"
};
如果要多次使用此模式(或有许多枚举成员),可以创建一个帮助器类来帮助构建枚举

class EnumBuilder<T = {}> {
    private allValues: any;
    end(): { [P in keyof T] : T[P]} {
        return this.allValues;
    }
    add<TKey extends string, TValue extends string>(key: TKey, value: TValue): EnumBuilder<T & { [P in TKey]: TValue }>{
        this.allValues[key] = value;
        return this as any;
    }
}

const defaultExport = new EnumBuilder()
    .add('red', "#FF0000")
    .add('tuna', "#36393F")
.end();

export default {
    ...defaultExport
};
类枚举生成器{ 私人所有价值观:任何; end():{[P in keyof T]:T[P]}{ 返回此.allValues; } 添加(键:TKey,值:TValue):EnumBuilder{ 此.allValues[key]=值; 将此文件作为任何文件返回; } } const defaultExport=新的EnumBuilder() .add('red',“#FF0000”) .加上(‘金枪鱼’,“#36393F”) .end(); 导出默认值{ …默认导出 };
class EnumBuilder<T = {}> {
    private allValues: any;
    end(): { [P in keyof T] : T[P]} {
        return this.allValues;
    }
    add<TKey extends string, TValue extends string>(key: TKey, value: TValue): EnumBuilder<T & { [P in TKey]: TValue }>{
        this.allValues[key] = value;
        return this as any;
    }
}

const defaultExport = new EnumBuilder()
    .add('red', "#FF0000")
    .add('tuna', "#36393F")
.end();

export default {
    ...defaultExport
};