Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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中具有字符串文本的元组类型?_Typescript - Fatal编程技术网

如何强制只读数组在Typescript中具有字符串文本的元组类型?

如何强制只读数组在Typescript中具有字符串文本的元组类型?,typescript,Typescript,我有一个配置对象,如下所示: const config = { envs: ['dev', 'test', 'prod'], targets: ['> 2%'] }; 当前,typescript编译器推断此对象的类型为: type IConfig = { envs: string[], targets: string[] }; 这是有意义的,因为我可能会在声明后的某个时刻对这个数组进行变异 但我不会改变它,所以我希望它是: type IConfig = { envs: ['dev',

我有一个配置对象,如下所示:

const config = { envs: ['dev', 'test', 'prod'], targets: ['> 2%'] };
当前,typescript编译器推断此对象的类型为:

type IConfig = { envs: string[], targets: string[] };
这是有意义的,因为我可能会在声明后的某个时刻对这个数组进行变异

但我不会改变它,所以我希望它是:

type IConfig = { envs: ['dev', 'test', 'prod'], targets: ['> 2%'] };
有没有办法告诉编译器将
config.envs
的类型推断为具有字符串文本的元组类型(而不键入)

编辑:最好的答案是90%,但我希望有一种方法可以应用于对象作为一个整体,而不是每个属性。我在示例中添加了另一个属性以使其更清晰。

结合:


FTR,有和。

可以简化,它们非常有用-感谢你们两位。我认为我对这一点解释得不够好,但我希望有一种方法可以应用于整个对象,而不是每个属性。我在示例中添加了另一个属性,以使其更清晰。属性将始终是字符串数组。道歉!
function asTupleOfLiterals<T extends string, U extends [T, ...T[]]>(tuple: U): U {
    return tuple;
}
const config = { envs: asTupleOfLiterals(['dev', 'test', 'prod']) };
function asObjectOfTuplesOfLiterals<T extends string,
    U extends {[n: string]: [T, ...T[]]}>(obj: U): U { return obj; }

const config = asObjectOfTuplesOfLiterals(
    { envs: ['dev', 'test', 'prod'], targets: ['> 2%'] });