Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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,我想写这样的东西 type ISomeType='one'|'two'|'more'; 常量bigdatatype={ ... someValue:“bla-bla”类型之一; ... } 这段代码不会出现编译错误。但是我想找到一些语法,它不允许as将bla-bla写入someValue中,该值必须是ISomeType类型 为bigdatatype创建类型不是解决方案。您可以使用索引签名定义接口。 根据你的评论,“是做部分打字的任何方法,不是全部” 您可以定义一种道具类型,让另一种成为您想要的

我想写这样的东西

type ISomeType='one'|'two'|'more';
常量bigdatatype={
...
someValue:“bla-bla”类型之一;
...
}
这段代码不会出现编译错误。但是我想找到一些语法,它不允许as将
bla-bla
写入
someValue
中,该值必须是
ISomeType
类型


bigdatatype
创建类型不是解决方案。

您可以使用索引签名定义接口。 根据你的评论,“是做部分打字的任何方法,不是全部”

您可以定义一种道具类型,让另一种成为您想要的任何类型

type ISomeType = 'one' | 'two' | 'more';
interface IPartial {
  someValue: ISomeType;
  [key: string]: any;
}

const bigBigBigDataType: IPartial = {
  someValue: 'asd', // Type '"asd"' is not assignable to type 'ISomeType'
  whateverYouWant: 1,
};

为什么解决方案
constsomevalue:ISomeType='blablabla'不可接受?通过使用强制转换,您已指示编译器不要警告您类型兼容性;您故意禁用了类型检查过程的这一部分。这就是它应该如何工作<代码>常量someValue:ISomeType='bla bla'
是使用该语言的正常方式-为什么不能接受?因为有时我无法定义大结构大类型(只是没有时间)。我只想为一个单节点的问题创建一个类型,了解更多信息understanding@YuriyGyerts您只需设置一次大数据类型结构。与其将其视为浪费时间,不如将建立这些大数据结构视为一项投资。(请记住,您可以从json结构自动生成typescript接口,这是一个很好的起点。)从长远来看,您将受益于编译时检查。如果您不想进行编译时检查,也不想按预期使用类型系统,那么您最好使用
any
,这样就失去了在JavaScript上编写TypeScript的一大好处。这是目前我拥有的最好的解决方案,但我还需要其他解决方案。类似于ISOMTYPE的“bla-bla”我知道您想要什么,但我认为这是不可能的。但是您仍然可以在cosnt中声明类型,因此没有接口。。。。cosnt bigdatatype:{someValue:ISomeType[key:string]:any}={…}