인수로 전달된 TypeScript 개체의 기본값 설정
function sayName(params: {firstName: string; lastName?: string}) {
params.lastName = params.lastName || 'smith'; // <<-- any better alternative to this?
var name = params.firstName + params.lastName
alert(name);
}
sayName({firstName: 'bob'});
이런 게 통할 줄 알았는데
function sayName(params: {firstName: string; lastName: string = 'smith'}) {
물론 이것들이 단순한 논쟁이라면 다음과 같이 할 수 있습니다.
function sayName(firstName: string, lastName = 'smith') {
var name = firstName + lastName;
alert(name);
}
sayName('bob');
또한 cofeescript에서는 다음과 같이 조건부 존재 연산자에 액세스할 수 있습니다.
param.lastName ?= 'smith'
다음 중 Javascript에 컴파일되는 것은 무엇입니까?
if (param.lastName == null) {
param.lastName = 'smith';
}
사실, 이제 간단한 방법이 있는 것 같습니다.다음 코드는 TypeScript 1.5에서 작동합니다.
function sayName({ first, last = 'Smith' }: {first: string; last?: string }): void {
const name = first + ' ' + last;
console.log(name);
}
sayName({ first: 'Bob' });
오브젝트에서 안에 .key=value
폴폴디디을 따라가다:
및 유형 선언입니다.
원래 거랑 조금 게 그대로 하는 게 아니라 이렇게 하는 거예요.params
이치노
을 옵션으로 하는 는, 「」를 합니다.?
인 ""를 합니다.={}
「 」 「 」 :
function sayName({first='Bob',last='Smith'}: {first?: string; last?: string}={}){
var name = first + " " + last;
alert(name);
}
sayName();
Typescript는 기본 파라미터를 지원합니다.
https://www.typescriptlang.org/docs/handbook/functions.html
또한 기본값을 추가하면 기본값에서 유추할 수 있으므로 유형 선언을 생략할 수 있습니다.
function sayName(firstName: string, lastName = "Smith") {
const name = firstName + ' ' + lastName;
alert(name);
}
sayName('Bob');
파라미터 오브젝트를 파괴하는 것은 위의 많은 답변이 목표로 하고 있는 것입니다.Typescript는 읽기 쉽고 직관적으로 이해할 수 있는 방법을 갖추고 있습니다.
기본 파괴:객체를 파기함으로써 객체에서 키 이름으로 속성을 선택할 수 있습니다.원하는 수의 속성을 정의할 수 있으며 기본값은 다음과 같은 기본 구문에 의해 설정됩니다.let {key = default} = object
.
let {firstName, lastName = 'Smith'} = myParamsObject;
//Compiles to:
var firstName = myParamsObject.firstName,
_a = myParamsObject.lastName,
lastName = _a === void 0 ? 'Smith' : _a;
파라미터 오브젝트의 인터페이스, 타입 또는 클래스를 쓰면 가독성이 향상됩니다.
type FullName = {
firstName: string;
/** @defaultValue 'Smith' */
lastName ? : string;
}
function sayName(params: FullName) {
// Set defaults for parameter object
var { firstName, lastName = 'Smith'} = params;
// Do Stuff
var name = firstName + " " + lastName;
alert(name);
}
// Use it
sayName({
firstName: 'Bob'
});
아니요. TypeScript에는 기본값이 있는 개체와 없는 개체 속성의 기본값이 기본적으로 설정되어 있지 않습니다.보다 풍부한 구조를 정의할 수 있습니다.
class Name {
constructor(public first : string,
public last: string = "Smith") {
}
}
인라인 타입의 정의 대신 그것을 사용합니다.
function sayName(name: Name) {
alert(name.first + " " + name.last);
}
유감스럽게도 다음과 같은 작업을 수행할 수 없습니다.
function sayName(name : { first: string; last?:string }
/* and then assign a default object matching the signature */
= { first: null, last: 'Smith' }) {
}
은, 인 경우에 됩니다.name
undefined
.
이것은 긴 컨스트럭터를 필요로 하지 않는 좋은 방법이 될 수 있습니다.
class Person {
firstName?: string = 'Bob';
lastName?: string = 'Smith';
// Pass in this class as the required params
constructor(params: Person) {
// object.assign will overwrite defaults if params exist
Object.assign(this, params)
}
}
// you can still use the typing
function sayName(params: Person){
let name = params.firstName + params.lastName
alert(name)
}
// you do have to call new but for my use case this felt better
sayName(new Person({firstName: 'Gordon'}))
sayName(new Person({lastName: 'Thomas'}))
다음으로 인터페이스를 사용하여 디폴트값으로 파기하는 방법을 제시하겠습니다."last Name"은 옵션입니다.
interface IName {
firstName: string
lastName?: string
}
function sayName(params: IName) {
const { firstName, lastName = "Smith" } = params
const fullName = `${firstName} ${lastName}`
console.log("FullName-> ", fullName)
}
sayName({ firstName: "Bob" })
파기하지 않고 디폴트 파라미터를 생성하여 전달할 수 있습니다.
interface Name {
firstName: string;
lastName: string;
}
export const defaultName extends Omit<Name, 'firstName'> {
lastName: 'Smith'
}
sayName({ ...defaultName, firstName: 'Bob' })
디폴트값을 다음과 같은 타입으로 설정하는 방법도 있습니다.
function name(param1:type=defaultValue1, paramr2:type=defaultvalue2,...) {//}
예를 들어 다음과 같습니다.
function addTwoNumbers(first:number = 1, second:number = 3):number {return first+second}
console.log(addTwoNumbers())
언급URL : https://stackoverflow.com/questions/23314806/setting-default-value-for-typescript-object-passed-as-argument
'programing' 카테고리의 다른 글
오리진 'localhost:3000'에서 '...'의 XMLHttpRequest에 대한 액세스가 CORS 정책에 의해 차단되었습니다. (0) | 2023.03.27 |
---|---|
플러그인 개발에서 워드프레스의 세션을 사용하는 방법 (0) | 2023.03.27 |
Ruby on Rails에 대한 WordPress 대체 방법은 무엇입니까? (0) | 2023.03.27 |
word press: 단축코드가 표시되는 경우에만 javascript 로드 (0) | 2023.03.27 |
Spring Boot Application 이름에 프로그래밍 방식으로 액세스하는 방법 (0) | 2023.03.27 |