ActionScript에서는 is 연산자를 사용하여 런타임에 유형을 확인할 수 있습니다 .
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
변수 (확장자 또는)가 특정 클래스 또는 TypeScript와 인터페이스인지 감지 할 수 있습니까?
언어 사양에서 그것에 대해 아무것도 찾을 수 없습니다. 클래스 / 인터페이스로 작업 할 때 있어야합니다.
답변
4.19.4 instanceof 연산자
instanceof
연산자는 상관 형 또는 ‘기능’인터페이스 유형의 서브 타입이 될 어떤 형으로 왼쪽 피연산자 객체 유형 또는 유형 파라미터 유형 및 오른쪽 피연산자를 필요로한다. 결과는 항상 부울 기본 유형입니다.
그래서 당신은 사용할 수 있습니다
mySprite instanceof Sprite;
이 연산자는 ActionScript에도 있지만 더 이상 사용해서는 안됩니다.
ActionScript 3.0에 새로 도입 된 is 연산자를 사용하면 변수 또는 표현식이 지정된 데이터 유형의 멤버인지 테스트 할 수 있습니다. 이전 버전의 ActionScript에서 instanceof 연산자는이 기능을 제공했지만 ActionScript 3.0에서는 instanceof 연산자를 사용하여 데이터 유형 멤버 자격을 테스트하지 않아야합니다. x instanceof y 표현식은 x의 프로토 타입 체인에서 y의 존재 여부를 확인하기 때문에 isof 연산자를 instanceof 연산자 대신 사용해야합니다 (ActionScript 3.0에서는 프로토 타입 체인이 상속 계층).
TypeScript instanceof
는 같은 문제를 공유합니다. 아직 개발중인 언어이므로 그러한 시설에 대한 제안을하는 것이 좋습니다.
또한보십시오:
- MDN : instanceof
답변
TypeScript에는 런타임에 변수 유형을 확인하는 방법이 있습니다. 유형 술어 를 리턴하는 유효성 검증 함수를 추가 할 수 있습니다 . 따라서 if 문 안에서이 함수를 호출 할 수 있으며 해당 블록 내의 모든 코드를 생각한 형식으로 안전하게 사용할 수 있습니다.
TypeScript 문서의 예 :
function isFish(pet: Fish | Bird): pet is Fish {
return (<Fish>pet).swim !== undefined;
}
// Both calls to 'swim' and 'fly' are now okay.
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}
https://www.typescriptlang.org/docs/handbook/advanced-types.html 에서 자세히
알아보십시오.
답변
이를 위해 instanceof
연산자를 사용할 수 있습니다 . MDN에서 :
instanceof 연산자는 생성자의 프로토 타입 속성이 객체의 프로토 타입 체인에 나타나는지 테스트합니다.
어떤 프로토 타입과 프로토 타입 체인을 모르는 경우 찾아 보는 것이 좋습니다. 또한 개념을 명확히 할 수있는 JS (TS는 이와 관련하여 유사하게 작동합니다) 예제가 있습니다.
class Animal {
name;
constructor(name) {
this.name = name;
}
}
const animal = new Animal('fluffy');
// true because Animal in on the prototype chain of animal
console.log(animal instanceof Animal); // true
// Proof that Animal is on the prototype chain
console.log(Object.getPrototypeOf(animal) === Animal.prototype); // true
// true because Object in on the prototype chain of animal
console.log(animal instanceof Object);
// Proof that Object is on the prototype chain
console.log(Object.getPrototypeOf(Animal.prototype) === Object.prototype); // true
console.log(animal instanceof Function); // false, Function not on prototype chain
이 예제의 프로토 타입 체인은 다음과 같습니다.
동물> Animal.prototype> Object.prototype