javascript - TypeScript type string of specific characters - Stack Overflow

Let's say I want to allow a hex string; so the only allowed values would be 0-9a-f. Is there a way

Let's say I want to allow a hex string; so the only allowed values would be 0-9a-f. Is there a way in TypeScript to define a type string that only takes certain strings? i.e.

// valid
const valid: HexString = '123abc';
// invalid
const invalid: HexString = 'ijk';

I know Regex type definitions is a proposal here, was wondering if there was a way to achieve this in the meantime.

Let's say I want to allow a hex string; so the only allowed values would be 0-9a-f. Is there a way in TypeScript to define a type string that only takes certain strings? i.e.

// valid
const valid: HexString = '123abc';
// invalid
const invalid: HexString = 'ijk';

I know Regex type definitions is a proposal here, was wondering if there was a way to achieve this in the meantime.

Share Improve this question asked Jun 23, 2019 at 1:23 KoushaKousha 36.4k59 gold badges188 silver badges314 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

Only with "OpaqueTypes" or "Nominal Types" aslong as you have an implementation that can make a string a HexCode the implementation is as follows.

export type Opaque<K, T> = T & { __TYPE__: K };
type HexCode = Opaque<string, "HexCode">

const createHexCode = (str: string): HexCode => {
  // implementation that forces string to be hexCode
  return str.toString() as HexCode // casting is needed.
}
const test = createHexCode("#333");
const isAssignableString: string = test; // yes anything that is HexCode is still technically a string.
const isAssignableHexCode: HexCode = "standard string" // error

this pattern is also useful for things like PositiveInteger and PasswordHash where you don't want anyone to accidentally assign a plain-string to that value you want to force people to use a function that returns a PasswordHash

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744076433a4554487.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信