내가 가지고 있다고 :
type User = {
...
}
새로 만들고 user
싶지만 빈 개체로 설정합니다.
const user: User = {}; // This fails saying property XX is missing
const user: User = {} as any; // This works but I don't want to use any
어떻게해야합니까? 변수가되는 것을 원하지 않습니다 null
.
답변
주의 사항
댓글에서 두 가지주의 할 점이 있습니다.
사용자가
User | {}
또는 유형이되도록하거나 빈 개체를 허용하도록 유형을Partial<User>
재정의해야User
합니다. 현재 컴파일러는 사용자가 사용자가 아니라고 올바르게 알려줍니다. –jcalz
유형의 일관성없는 인스턴스를 생성하여 TypeScript의 전체 목적을 훼손하기 때문에 이것이 적절한 대답으로 간주되어야한다고 생각하지 않습니다. 이 예에서 속성
Username
은 정의되지 않은 상태로 남아 있지만 유형 주석은 정의 할 수 없다고 말합니다. –Ian Liu Rodrigues
대답
의 하나 타이프의 설계 목표는 것입니다 “정확성과 생산성 사이의 균형을.” 이 작업을 수행하는 것이 생산적이면 유형 어설 션 을 사용하여 유형 이 지정된 변수에 대한 빈 개체를 만듭니다.
type User = {
Username: string;
Email: string;
}
const user01 = {} as User;
const user02 = <User>{};
user01.Email = "foo@bar.com";
여기 에 당신을위한 실제적인 예가 있습니다 .
답변
당신이하려는 일에 정말로 달려 있습니다. 타입은 타입 스크립트의 문서이므로 타입을 생성 할 때 이것이 어떻게 사용되어야하는지에 대한 의도를 보여주고 싶습니다.
옵션 1 : 사용자가 평생 동안 일부 속성을 가질 수 있지만 전부는 아닌 경우
모든 속성을 선택 사항으로 설정
type User = {
attr0?: number
attr1?: string
}
옵션 2 : 사용자를 포함하는 변수가 null로 시작할 수있는 경우
type User = {
...
}
let u1: User = null;
실제로 여기서 요점이 할당 될 대상을 알기 전에 User 개체를 선언하는 것이라면 할당 let u1:User
없이 수행하고 싶을 것입니다 .
옵션 3 : 아마도 원하는 것
실제로 typescript의 전제는 실수를 방지하기 위해 유형에서 설명하는 정신 모델을 준수하는지 확인하는 것입니다. 객체에 하나씩 추가하려면 TypeScript가 수행하지 않으려는 습관입니다.
좀 더 로컬 변수를 만든 다음 정식 사용자가 될 준비가되었을 때 사용자 포함 변수에 할당 할 수 있습니다. 이렇게하면 부분적으로 형성된 사용자가 결코 남지 않습니다. 그런 것들은 끔찍합니다.
let attr1: number = ...
let attr2: string = ...
let user1: User = {
attr1: attr1,
attr2: attr2
}
답변
typescript에서 아래와 같이 할 수 있습니다.
const _params = {} as any;
_params.name ='nazeh abel'
타입 스크립트는 자바 스크립트처럼 동작하지 않기 때문에 타입을 만들어야합니다. 그렇지 않으면 속성을 객체에 동적으로 할당 할 수 없습니다.
답변
빈 개체 리터럴을 선언 한 다음 나중에 값을 할당하는 경우 해당 값을 선택 사항으로 간주 할 수 있으므로 (있을 수도 있고 없을 수도 있음) 물음표와 함께 옵션으로 입력하십시오.
type User = {
Username?: string;
Email?: string;
}
답변
using const user = {} as UserType
은 인텔리 센스 만 제공하지만 런타임 user
에는 빈 객체 {}
이며 내부에 속성이 없습니다. 그 의미 user.Email
는 undefined
대신 줄 것입니다""
type UserType = {
Username: string;
Email: string;
}
따라서 기본 속성을 사용 class
하여 constructor
실제로 개체를 만들 려면 with 를 사용하십시오 .
type UserType = {
Username: string;
Email: string;
};
class User implements UserType {
constructor() {
this.Username = "";
this.Email = "";
}
Username: string;
Email: string;
}
const myUser = new User();
console.log(myUser); // output: {Username: "", Email: ""}
console.log("val: "+myUser.Email); // output: ""
interface
대신 사용할 수도 있습니다.type
interface UserType {
Username: string;
Email: string;
};
… 그리고 나머지 코드는 동일하게 유지됩니다.
실제로이 constructor
부분을 건너 뛰고 다음 과 같이 사용할 수도 있습니다.
class User implements UserType {
Username = ""; // will be added to new obj
Email: string; // will not be added
}
const myUser = new User();
console.log(myUser); // output: {Username: ""}