javascript - chart - TypeScript tipo de caracteres?
title html (5)
Como sé, los tipos básicos de mecanografía no incluyen char.
Mi pregunta es muy breve. Soy nuevo en TypeScript, he estado buscando por aquí y por allá pero aún no he encontrado una respuesta.
¿Alguien con experiencia en TypeScripter sabe si hay un tipo de personaje o una manera fácil de lograrlo?
No estoy seguro de que sea fácil , pero podrías hacer algo con tipos literales de cadena:
type Char = ''a'' | ''b'' | ''c'' | ''d'' | ''e'' | ''f'' | ''g'' | ''h'' | ''i'' | ''j'' | ''k''
| ''l'' | ''m'' | ''n'' | ''o'' | ''p'' | ''q'' | ''r'' | ''s'' | ''t'' | ''u'' | ''v'' | ''w'' | ''x''
| ''y'' | ''z'' | ''A'' | ''B'' | ''C'' | ''D'' | ''E'' | ''F'' | ''G'' | ''H'' | ''I'' | ''J'' | ''K''
| ''L'' | ''M'' | ''N'' | ''O'' | ''P'' | ''Q'' | ''R'' | ''S'' | ''T'' | ''U'' | ''V'' | ''W'' | ''X''
| ''Y'' | ''Z'' | ''0'' | ''1'' | ''2'' | ''3'' | ''4'' | ''5'' | ''6'' | ''7'' | ''8'' | ''9'' // etc....;
Por supuesto, esta es una solución bastante quebradiza y se descompone cuando se consideran caracteres Unicode, y realmente no lo sugeriría. Como lo menciona Ryan, JavaScript en sí mismo no tiene ninguna noción de una cadena de longitud fija, ni el concepto de un char
como distinto de una string
.
Puede usar una expresión regular dentro de TypeGuard para contener su tipo, por ejemplo: (puede declarar una enumeración vacía para obtener un nuevo tipo asociado con la protección de tipo)
enum CharType { }
export type Char = string & CharType
const isChar=(str: string): str is Char => /^(.|/n)$/.test(
str
)
export char(c:string):Char{
//you can also use is char here for to test whether actually is char
if (!isChar(c)){
throw new Error(''not a char'')
}
return c
}
Ahora Char solo hace coincidir las cosas que vienen de llamar a Char (p. Ej., Ejecutado en realidad al llamar a la función en lugar de simplemente afirmarse en tiempo de compilación. El compilador simplemente acepta que se devuelve un Char y eso es realmente cierto si lo piensas, ya que simplemente lanzará lo contrario) )
Fuente original (aplicada a la cadena de fecha): Objeto atómico
Suposiciones: Supongo que al mencionar mecanografiado se refiere a un tipo utilizado para las verificaciones en tiempo de compilación por parte del compilador de guión tipográfico y no buscar ningún tipo de optimización en el lado js compilado real (ya que js solo tiene cadenas)
El único problema que puedo ver es que puede pasar lo que sea a la función char y solo se ejecutará en tiempo de ejecución. Pero nunca llegará a un estado en el que espera un Char y obtiene otra cosa (ya que Chars solo proviene de llamar a char).
En una nota lateral, incluso los lanzamientos de java lanzan excepciones de tiempo de ejecución.
Aunque el enfoque anterior podría no tener mucho que ver con los modelos, sí encuentro algunos puntos en común ...
TypeScript no tiene un tipo para representar cadenas de longitud fija.
Un Char es simplemente un número. Como los tipos básicos de TypeScript no incluyen caracteres, lo que podría hacer es almacenar un número y convertirlo de un lado a otro:
var number = "h".charCodeAt(0);
var char = String.fromCharCode(number)
Y a algo como:
class Char {
private _value:Number;
constructor(char: Number | String){
this.setValue(char);
}
get getValue():String {
return String.fromCharCode(this._value);
}
set setValue(char: Number | String) {
if (typeof char === "number") {
this._value = char;
}
else {
this._value = char.charCodeAt(0);
}
}
}