programing

인수로 전달된 TypeScript 개체의 기본값 설정

muds 2023. 3. 27. 21:42
반응형

인수로 전달된 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' }) {

} 

은, 인 경우에 됩니다.nameundefined.

이것은 긴 컨스트럭터를 필요로 하지 않는 좋은 방법이 될 수 있습니다.

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

반응형