programing

클래스 속성을 정수라고 지정하려면 어떻게 해야 합니까?

iphone6s 2023. 3. 18. 08:23
반응형

클래스 속성을 정수라고 지정하려면 어떻게 해야 합니까?

TypeScript에서는, 「」를 참조해 주세요ID" " " 가 integer조금 혼란스러웠습니다.

플러그인을에서는 TypeScript가 됩니다.int인텔리센스그러나 다음과 같은 컴파일 오류가 나타납니다.

현재 범위에 'int'라는 이름이 없습니다.

'인 유형'만.number,string,boolean,null , , , , 입니다.undefined.integerdiscloss.discloss.

이제 두 가지 질문이 남았습니다.

  1. 클래스 사용자에게 특정 필드가 단순한 데이터 전송이 아님을 어떻게 표시해야 합니까?number 하 but butinteger 안 돼)floating 또는 포인트decimal★★★★★★★★★★★★★★★★★★?

  2. ?가 는?int유효한 타입이 아닌 경우 인텔리센스 목록에 포함됩니까?

: ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★JavaScript타입이 int를 은 어렵습니다.int★★★★★★★★…난 그것들 모두를 안다.TypeScript내 클래스 사용자에게 이 필드가 다음 필드여야 한다는 주석을 제공하는 방법integer시시어 특정 ?정? ?? ????

  1. 숫자가 정수인지 부동소수인지 직접 지정할 수 있는 방법은 없다고 생각합니다.TypeScript 사양 섹션 3.2.1에서 다음을 볼 수 있습니다.

    "Number primitive type은 비슷한 이름의 JavaScript primitive type에 대응하며 2배 정밀도의 64비트 형식 IEEE 754 부동소수점 값을 나타냅니다.."

  2. 생각에는intVisual Studio intelliSense visual visual visual 。은 ★★★★★★★★★★★입니다.number.

TypeScript는 자바스크립트의 슈퍼셋으로 int라는 개념이 없습니다.숫자라는 개념만 있고 부동 소수점이 있습니다.

TypeScript int를 할 수 그렇기 때문에 컴파일러가 신뢰할 수 있는 추가가 불가능합니다.int타이프 스크립트

처음에 Visual Studio에서 IntelliSense를 사용할 때는 툴링으로 무엇을 공급할지를 결정할 수 없기 때문에 int를 포함한 모든 것을 얻을 수 있습니다.그러나 이미 알려진 유형의 것을 취급하고 있는 경우에는 센스 있는 IntelliSense를 사용할 수 있습니다.

var myInt: number;
var myString: string;

myInt. // toExponential, toFixed, toPrecision, toString
myString. // charAt, charCodeAt, concat, indexOf, lastIndexOf, length and many more...

TypeScript에서는 마커를 사용하여 불투명 유형이라고도 하는 것을 대략적으로 계산할 수 있습니다.

// Helper for generating Opaque types.
type Opaque<T, K> = T & { __opaque__: K };

// 2 opaque types created with the helper
type Int = Opaque<number, 'Int'>;
type ID = Opaque<number, 'ID'>;

// using our types to differentiate our properties even at runtime
// they are still just numbers
class Foo {
    someId: ID;
    someInt: Int;
}

let foo = new Foo();

// compiler won't let you do this due to or markers
foo.someId = 2;
foo.someInt = 1;

// when assigning, you have to cast to the specific type
// NOTE: This is not completely type safe as you can trick the compiler 
// with something like foo.someId = 1.45 as ID and it won't complain.
foo.someId = 2 as ID;
foo.someInt = 1 as Int;

// you can still consume as numbers
let sum: number = foo.someId + foo.someInt;

이를 통해 속성에서 기대하는 유형을 코드로 보다 명확하게 할 수 있으며, 컴파일러는 캐스트 없이 원시 값을 할당할 수 없습니다.이로 인해 추가 .js 출력은 생성되지 않으며, 기본 유형에 관계없이 값을 소비하고 사용할 수 있습니다.이 예에서는 숫자를 사용하지만 문자열이나 다른 유형에서도 사용할 수 있습니다.

이 예에서는 아직 컴파일러가 Int나 Id가 아닌 것을 받아들이도록 속일 수 있지만, 1.45를 Int로 할당하려고 하면 튀어나올 것입니다.또한 런타임 검증을 제공하기 위해 값을 작성하기 위해 사용하는 도우미 함수를 만들 수도 있습니다.

여러 가지 방법으로 "표시된" 유형을 만들 수 있습니다.여기 좋은 기사가 있습니다.https://michalzalecki.com/nominal-typing-in-typescript/

integer ★★★★★★★★★★★★★★★★★」floatnumberJavaScript 같scriptscript TypeScript java java java java 。 에게 당신이 하고 있다고 integer타입 에일리어스를 사용할 수 있습니다.

type integer = number;
type float = number;

// example:
function setInt(id: integer) {}

이건 '아예'예요.number하면, 「」를 얻을 수 .float.

다음 중 하나:
"에일리어스는 실제로 새로운 유형을 만드는 것이 아니라 해당 유형을 나타내는 새 이름을 만듭니다.이렇게 하다'는 거예요.

이것은 구글에서 가장 중요한 결과이기 때문에 제가 찾은 솔루션을 제공해야 한다고 생각합니다.

「」를 사용합니다.bigint

【 2020년 2020】bigint인정받았으니 언급할 가치가 있다.을 사용하다bigint에 큰 .number.

const myNumber: bigint = 10n


공칭 유형/태그 부착 유형/불투명 유형 사용

방법은 공칭형을 더는 잘 bigint단, 패턴은 단순한 타입이 아니라 모든 타입으로 일반화되어 있습니다.number. TypeScript는 이를 위한 "1등급" 지원이 없기 때문에 건방진 해킹을 해야 합니다.이 라이브러리에는 다음과 같은 일반적인 유형이 포함되어 있습니다.Integer그냥 쓰시는 게 좋을 것 같은데, 제가 아래에 설명을 해드릴게요.

, 먼저 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.'integerdiscloss.discloss.

const TAG = Symbol()
type integer = number & { readonly [TAG]: unique symbol }

TAG같은 키를 가진 객체를 실수로 만들지 않도록 고유한 값을 갖도록 합니다.또한 같은 이유로 필드를 고유한 기호로 만듭니다.정수에는 실제로 이 개체 필드가 없지만 괜찮습니다.

으로, 「」를 추가할 수 .integer로로 합니다.number를 사용합니다.+않아지지않않않않다다따라서 여기서 형식 시스템을 함수로 마사지하여 인수에 대한 형식 안전을 적용할 수 있습니다. 이건요.integer– 더할 수 .s – 더 、 시 、 더 、 시 、 시 、 시 、 시 、 시 、 s 시 s s s s s s s 。

type guard = <A>(f: (...ns: Array<A>) => A, ...ns: Array<A>) => A
const guard: guard = (f, ...ns) => f(...ns)

number

const bad: integer = guard((a, b) => a + b as integer, myCoolInteger, 10)

다음과 같은 오류가 발생합니다.

Argument of type '10' is not assignable to parameter of type 'integer'.
  Type '10' is not assignable to type '{ readonly [TAG]: unique symbol; }'.(2345)

(반환 유형을 에).as integer와 같은 ./하거나 실행 시 또는 할 수 .Math.round된 버전의 「 toised to to of of of 」의guard함께 수즉, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, GBP ★★★★★★★★★★★★★★★★★」USD그리고 그것들을 추가하려고 하면, 그것은 당신이 의도한 것이 아닐 것입니다.

AssemblyScript asm.js asm.js asm.js asembly Script 。 파일을 할 수 .--jsFile.

, 「정수」를 , 값을 강제로 로 할 수.| 0.

이것에 의해, 브라우저 엔진에서는 동작중의 플로트보다 빠른 정수를 사용할 수 있게 되어, 퍼포먼스가 향상됩니다.

예를 들어, 다음과 같이 기입합니다.

function add(a: i32, b: i32) {
  return a + b
}

다음과 같이 써야 합니다.

type i32 = number
function add(a: i32, b: i32) {
  a = a | 0
  b = b | 0
  return a + b
}

또는 JavaScript(asc --jsFile이 생성하는 것입니다)

function add(a, b) {
  a = a | 0
  b = b | 0
  return a + b
}

클래스 속성:

type i32 = number
class MyClass {
  a: i32 = a | 0
}

음, 보신 바와 같이, 타이프스크립트는 javascript language와 같은 데이터 타입을 띄우지 않습니다.「 」만 가지고 있다.number 것을 망라하고 있다int ★★★★★★★★★★★★★★★★★」double 할 도 있습니다.int ★★★★★★★★★★★★★★★★★」double에러/성공했을 경우에 몇 가지 상태를 반환합니다.수업 방법으로는 다음과 같은 것이 있습니다.

function SetN(x:number) {
   var is_int = parseInt(x) === parseFloat(x);
   if(is_int) this.n = x;
   return is_int;
}

//..
y = 10.5;
if(SetN(y)) {
  //OK
} else {
   //error not set y isn't a int
}

주의: 다음 기간에는 작동하지 않습니다.10.0를 들어,하지 않은 하여 "예", "예", "예", "예", "예", "예", "예", "예", "예", "예", "예", "예", "..

int이전 버전의 javascript(ECMAScript)에서는 향후 키워드 사용을 위해 예약되어 있었습니다.그러나 현재는 유효한 단어입니다(여기서 "now"는 "최신 사양"에 해당합니다).

예를 들어 262에서는 아직 예약되어 있습니다.http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

타자기록에 더해서...int구현되었지만 모든 컴파일 시간 유형 검사 및 캐스팅 규칙을 사용할 수 있습니다.

복싱을 하지 않는 번호 인터페이스의 실장을 다음에 나타냅니다.이 디자인을 사용하여 Integer 유형을 생성할 수 있을 것 같습니다.

3과 같이 작은 숫자보다 작은 음수가 아닌 정수만 받아들이는 유형을 원하는 경우 다음과 같이 쓸 수 있습니다.

type SmallNumber = 0 | 1 | 2

큰 숫자의 경우 다음 코드를 사용할 수 있습니다.본인 부담으로 사용 :)

type Length<T extends any[]> = 
    T extends { length: infer L } ? L : never;

type LessThan<L extends number, T extends any[] = [], O = 0> = 
    T extends { length: L } ? O : LessThan<L, [...T, any], O | Length<T>>;

type ColorCode = LessThan<256>;

블로그 투고에서 활자 산술에 대한 길이 함수를 가져왔습니다.

언급URL : https://stackoverflow.com/questions/12897742/how-do-you-specify-that-a-class-property-is-an-integer

반응형