2016-11-10 2 views
1

Typescript 클래스가 있습니다. 내가 모든 객체의 필드를 통해 루프를 시도했습니다 다른 클래스의 일부 기능에서 일부 필드를Typescript 필드 형식 가져 오기

field1 : ko.observable<number>(); 
field2 : ko.observable<string>(''); 
... 

을 가지고 있으며, 유형 number의 필드에 나는 약간의 수정을 수행해야합니다.

어떻게 감지 할 수 있습니까?


나는 다음 시도했지만 항상 논리적 인 string으로 유형을 얻을했습니다. locationModel 당신의 문제가 양식에서 입력 값은 항상 문자열이 될 것입니다 것입니다 text

Object.keys(locationModel) 
.forEach(property => { 
       if (typeof locationModel[property]() === 'number') { } 
       else{ } 
      } 
     }); 

답변

1

자동 유형 변환을 녹아웃으로 넣으려면 해당 확장 기능을 만들 수 있습니다.

  • 쓰기 저장에 대한 관찰에서 변환 된 값을 입력 값을 변환 또는
  • 저장에 입력되는 값 : 가장 기본적인 형태에서

    그것은 하나가 있음을 writable computed를 반환 할 수 관찰 할 수 있으며 변경되지 않고 번으로 변환됩니다..

후자의 구현이 맘에 수 - 아래의 미리보기를 실행하고 유형이 뷰 모델에 반영하는 방법을 참고 :

ko.extenders.type = function (target, type) { 
 
    var typedValue = ko.pureComputed({ 
 
     read: function() { 
 
      var value = target(); 
 
      if (typeof value === "undefined" || value === null) { 
 
       return value; 
 
      } else { 
 
       return type(value); 
 
      } 
 
     }, 
 
     write: target 
 
    }); 
 
    typedValue.raw = target; 
 
    return typedValue; 
 
}; 
 

 
var vm = { 
 
    num: ko.observable().extend({type: Number}), 
 
    str: ko.observable().extend({type: String}) 
 
}; 
 

 
ko.applyBindings(vm); 
 

 
// init some values 
 
vm.num(100); 
 
vm.str(100);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
Num: <input data-bind="value: num"> (raw: <span data-bind="text: num.raw"></span>)<br> 
 
Str: <input data-bind="value: str"> (raw: <span data-bind="text: str.raw"></span>)<br><br> 
 

 
<hr> 
 
View Model:<br> 
 
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

0

, 당신은 그들에게 종류를 만들기 위해 제대로 값을 구문 분석 할 필요가 입력이 유형 인 HTML 양식에서 값 을 작성 당신이 원하는 그.

그래서 모든 입력 문자열을 모델의 적절한 값으로 변환 할 수있는 매핑을 수동으로 설정해야합니다.

+1

내가 동의합니다. 어쨌든 관측 대상을 특정 유형으로 강제 할 수 있는지 확신하지 못합니다. 이것이 작동하는 방식이 아닙니다. 그러나 [extenders] (http://knockoutjs.com/documentation/extenders.html)를 사용하여 녹아웃 값을 자동으로 변환 할 수 있습니다. – Tomalak

+0

@Tomalak 타이프 스크립트 관점에서 볼 때 관측 대상을 특정 유형으로 입력하면 대부분의 TS 입력과 마찬가지로 런타임에 이러한 제약 조건이 모두 손실 되더라도 컴파일 타임에는 모두 정상입니다. – Alex

+0

정확합니다. 아마도 OP는 실수로 TypeScript가 런타임 타입 변환을 포함한다고 생각합니까? – Tomalak